1
1
package oracleai ;
2
2
3
- import com .fasterxml .jackson .annotation .JsonIgnoreProperties ;
4
3
import com .fasterxml .jackson .databind .ObjectMapper ;
5
- import com .fasterxml .jackson .databind .ser .impl .SimpleFilterProvider ;
6
- import com .oracle .bmc .aivision .AIServiceVisionClient ;
7
- import com .oracle .bmc .aivision .model .*;
8
- import com .oracle .bmc .aivision .requests .AnalyzeImageRequest ;
9
- import com .oracle .bmc .aivision .responses .AnalyzeImageResponse ;
10
- import com .oracle .bmc .auth .AuthenticationDetailsProvider ;
11
- import com .oracle .bmc .auth .ConfigFileAuthenticationDetailsProvider ;
12
- import com .oracle .bmc .auth .InstancePrincipalsAuthenticationDetailsProvider ;
13
- import com .oracle .bmc .generativeai .GenerativeAiClient ;
14
- import com .oracle .bmc .generativeai .model .GenerateTextDetails ;
15
- import com .oracle .bmc .generativeai .model .GenerateTextResult ;
16
- import com .oracle .bmc .generativeai .model .OnDemandServingMode ;
17
- import com .oracle .bmc .generativeai .requests .GenerateTextRequest ;
18
- import com .oracle .bmc .generativeai .responses .GenerateTextResponse ;
19
- import lombok .Getter ;
20
- import lombok .Setter ;
4
+ import oracleai .services .OracleGenAI ;
5
+ import oracleai .services .OracleVisionAI ;
21
6
import org .slf4j .Logger ;
22
7
import org .slf4j .LoggerFactory ;
23
8
import org .springframework .stereotype .Controller ;
24
9
import org .springframework .web .bind .annotation .*;
25
10
import org .springframework .web .multipart .MultipartFile ;
26
11
27
- import java .util .ArrayList ;
28
- import java .util .Arrays ;
29
- import java .util .List ;
30
-
31
12
import org .springframework .ui .Model ;
32
13
33
14
@ Controller
@@ -41,95 +22,31 @@ public class ExplainAndAdviseOnHealthTestResults {
41
22
public String analyzedoc (@ RequestParam ("file" ) MultipartFile file , Model model )
42
23
throws Exception {
43
24
log .info ("analyzing image file:" + file );
44
- String objectDetectionResults = processImage (file .getBytes (), true );
25
+ String objectDetectionResults = OracleVisionAI . processImage (file .getBytes (), true );
45
26
ObjectMapper mapper = new ObjectMapper ();
46
- ImageData imageData = mapper .readValue (objectDetectionResults , ImageData .class );
27
+ OracleVisionAI . ImageData imageData = mapper .readValue (objectDetectionResults , OracleVisionAI . ImageData .class );
47
28
String concatenatedText = concatenateText (imageData );
48
29
System .out .println (concatenatedText );
49
30
log .info ("fullText = " + concatenatedText );
50
- String explanationOfResults = OracleGenAI .chat ("explain these test results in simple terms, in less than 100 words, " +
31
+ String explanationOfResults =
32
+ OracleGenAI .chat ("explain these test results in simple terms, in less than 100 words, " +
51
33
"and tell me what should I do to get better results: \" " + concatenatedText + "\" " );
52
34
System .out .println ("ExplainAndAdviseOnHealthTestResults.analyzedoc explanationOfResults:" + explanationOfResults );
53
35
model .addAttribute ("results" , explanationOfResults );
54
36
return "resultspage" ;
55
37
}
56
38
57
- private static String concatenateText (ImageData imageData ) {
39
+ private static String concatenateText (OracleVisionAI . ImageData imageData ) {
58
40
if (imageData .getImageText () == null || imageData .getImageText ().getWords () == null ) return "" ;
59
41
StringBuilder sb = new StringBuilder ();
60
- for (Word word : imageData .getImageText ().getWords ()) {
42
+ for (OracleVisionAI . Word word : imageData .getImageText ().getWords ()) {
61
43
sb .append (word .getText ()).append (" " );
62
44
}
63
45
return sb .toString ().trim ();
64
46
}
65
47
66
48
67
- String processImage (byte [] bytes , boolean isConfigFileAuth ) throws Exception {
68
- AIServiceVisionClient aiServiceVisionClient ;
69
- AuthenticationDetailsProvider provider ;
70
- if (isConfigFileAuth ) {
71
- provider = new ConfigFileAuthenticationDetailsProvider (
72
- System .getenv ("OCICONFIG_FILE" ),System .getenv ("OCICONFIG_PROFILE" ));
73
- aiServiceVisionClient = AIServiceVisionClient .builder ().build (provider );
74
- } else {
75
- aiServiceVisionClient = new AIServiceVisionClient (InstancePrincipalsAuthenticationDetailsProvider .builder ().build ());
76
- }
77
- List <ImageFeature > features = new ArrayList <>();
78
- ImageFeature faceDetectionFeature = FaceDetectionFeature .builder ()
79
- .maxResults (10 )
80
- .build ();
81
- ImageFeature classifyFeature = ImageClassificationFeature .builder ()
82
- .maxResults (10 )
83
- .build ();
84
- ImageFeature detectImageFeature = ImageObjectDetectionFeature .builder ()
85
- .maxResults (10 )
86
- .build ();
87
- ImageFeature textDetectImageFeature = ImageTextDetectionFeature .builder ().build ();
88
- // features.add(faceDetectionFeature);
89
- // features.add(classifyFeature);
90
- // features.add(detectImageFeature);
91
- features .add (textDetectImageFeature );
92
- InlineImageDetails inlineImageDetails = InlineImageDetails .builder ()
93
- .data (bytes )
94
- .build ();
95
- AnalyzeImageDetails analyzeImageDetails = AnalyzeImageDetails .builder ()
96
- .image (inlineImageDetails )
97
- .features (features )
98
- .build ();
99
- AnalyzeImageRequest request = AnalyzeImageRequest .builder ()
100
- .analyzeImageDetails (analyzeImageDetails )
101
- .build ();
102
- AnalyzeImageResponse response = aiServiceVisionClient .analyzeImage (request );
103
- ObjectMapper mapper = new ObjectMapper ();
104
- mapper .setFilterProvider (new SimpleFilterProvider ().setFailOnUnknownId (false ));
105
-
106
- String json = mapper .writeValueAsString (response .getAnalyzeImageResult ());
107
- // System.out.println("AnalyzeImage Result");
108
- // System.out.println(json);
109
- return json ;
110
- }
111
-
112
-
113
- @ JsonIgnoreProperties (ignoreUnknown = true )
114
- @ Getter
115
- @ Setter
116
- static public class ImageData {
117
- private ImageText imageText ;
118
- }
119
49
120
- @ JsonIgnoreProperties (ignoreUnknown = true )
121
- @ Getter
122
- @ Setter
123
- static class ImageText {
124
- private List <Word > words ;
125
- }
126
-
127
- @ JsonIgnoreProperties (ignoreUnknown = true )
128
- @ Getter
129
- @ Setter
130
- static class Word {
131
- private String text ;
132
- }
133
50
/**
134
51
135
52
0 commit comments