Docker環境のJavaアプリからcustom visionのSDKで予測エンドポイントをテストすると404エラーが発生します。
環境
OS
エディション Windows 11 Home
バージョン 24H2
OS ビルド 26120.2415
エクスペリエンス Windows 機能エクスペリエンス パック 1000.26100.36.0
docker desktop
Current version: 4.27.2 (137060)
Java
openjdk:17
Azure custom vision
Pricing Tier: F0
SDKライブラリ
implementation 'com.azure:azure-cognitiveservices-customvision-training:1.1.0-preview.2' implementation 'com.azure:azure-cognitiveservices-customvision-prediction:1.1.0-preview.2'
前提
Azure custom visionのGUIにて下記を完了済です。
Windows 11 Homeのdocker desktop環境でJavaアプリを動かしてます。
プログラムはMicrosoft Learn Challenge「クイックスタート: Custom Vision クライアント ライブラリまたは REST API を使って画像分類プロジェクトを作成する」の通り作成してます。
String projectId = /* プロジェクトIDをセットする */;
String predictionKey = /* predictionのキーをセットする */;
String predictionEndPoint = /* predictionのendPointをセットする */;
String publishedName = /* 公開名をセットする */;
//
CustomVisionPredictionClient predictor = CustomVisionPredictionManager
.authenticate(predictionEndPoint, predictionKey)
.withEndpoint(predictionEndPoint);
byte[] testImage = GetImage("/gazou", "test_image.jpg");
// predict
// ここで404が発生する{"error":{"code":"404","message": "Resource not found"}}
ImagePrediction results = predictor.predictions().classifyImage().withProjectId(UUID.fromString(projectId))
.withPublishedName(publishedName).withImageData(testImage).execute();
for (Prediction prediction : results.predictions()) {
System.out.println(String.format("\t%s: %.2f%%", prediction.tagName(), prediction.probability() * 100.0f));
}
上記のJava変数に設定する値
projectIdに①をセットする predictionKeyに②をセットする
predictionEndPointに③をセットする
(「https://customvision20241121-prediction.cognitiveservices.azure.com/」までの文字列をセット)
publishedNameに④をセットする
Dockerfile
# ベースイメージの指定
FROM openjdk:17
# ワーキングディレクトリの設定
WORKDIR /mock
#
RUN pwd
RUN ls -l
# アプリケーションのJARファイルをコンテナにコピー
# build/はローカル環境のみ、pushすると.gitignoreで存在しない
COPY build/libs/*.jar mock.jar
#COPY --from=builder mock.jar
# PostgreSQL JDBCドライバのコピー
COPY lib/postgresql-*.jar lib/
# ポートの公開
EXPOSE 8080
# アプリケーションの実行コマンド
ENTRYPOINT ["java", "-jar", "mock.jar"]
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.0'
id 'io.spring.dependency-management' version '1.1.5'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.webjars:jquery:3.5.0'
implementation 'org.webjars:bootstrap:4.5.2'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
developmentOnly 'org.springframework.boot:spring-boot-docker-compose'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.postgresql:postgresql:42.7.4'
implementation 'com.microsoft.azure.cognitiveservices:azure-cognitiveservices-computervision:1.0.9-beta'
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.azure:azure-cognitiveservices-customvision-training:1.1.0-preview.2'
implementation 'com.azure:azure-cognitiveservices-customvision-prediction:1.1.0-preview.2'
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
implementation 'org.json:json:20231013'
}
tasks.named('test') {
useJUnitPlatform()
}
エラー現象
このJavaアプリからAzure custom visionのSDKを使って予測エンドポイントをテストすると下記の404エラーが発生してしまいます。
2024-12-04T05:20:56.992Z ERROR 1 --- [mock] [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: com.microsoft.azure.cognitiveservices.vision.customvision.prediction.models.CustomVisionErrorException: Status code 404, {"error":{"code":"404","message": "Resource not found"}}] with root cause
上記のエラーを解消して、Javaアプリからcustom visionの予測エンドポイントをテストをするためには、どうすればよいでしょうか? よろしくお願いいたします。