//If the user uploaded an image, read it, and send it to the Vision API
if (activity.Attachments.Any() && activity.Attachments.First().ContentType.Contains("image"))
{
//stores image url (parsed from attachment or mess`enter code here`age)
string uploadedImageUrl = activity.Attachments.First().ContentUrl; ;
uploadedImageUrl = HttpUtility.UrlDecode(uploadedImageUrl.Substring(uploadedImageUrl.IndexOf("file=") + 5));
using (Stream imageFileStream = File.OpenRead(uploadedImageUrl))
{
try
{
analysisResult = await visionClient.AnalyzeImageAsync(imageFileStream, visualFeatures);
}
catch (Exception e)
{
analysisResult = null; //on error, reset analysis result to null
}
}
}
//Else, if the user did not upload an image, determine if the message contains a url, and send it to the Vision API
else
{
try
{
analysisResult = await visionClient.AnalyzeImageAsync(activity.Text, visualFeatures);
}
catch (Exception e)
{
analysisResult = null; //on error, reset analysis result to null
}
}
私は上記のコードを試しています。私はここからコードを得た:https://docs.botframework.com/en-us/bot-intelligence/vision/#example-vision-bot。Vision API C# - 保存された画像のURLをAzureで読み取る
このコードは、ローカルで実行したときにできることを行いますが、アップロードしたファイルから画像のURLを読み取ることは、ボットをAzureに公開してそこから実行した後は機能しません。
私はAzureの私の公開Webappボットに直接Visual Studioを添付してデバッグしようとしました。 WebappがAzureサーバーの一時保存場所から保存された画像のURLを読み取ることができないか、一時保存場所にアクセスできないようです。
このライン:
uploadedImageUrl = HttpUtility.UrlDecode(uploadedImageUrl.Substring(uploadedImageUrl.IndexOf("file=") + 5));
がこの値を表示します "https://bcattachmentsprod.blob.core.windows.net/at4984/Gv4cOx6OdSl-オリジナル"
次に、この行: 「S:
using (Stream imageFileStream = File.OpenRead(uploadedImageUrl))
は、値を変更します// bcattachmentsprod.blob.core.windows.net/at4984/Gv4cOx6OdSl-original "
そしてそれはただ止まります。
誰もこのような問題に遭遇しましたか?この問題を解決するにはどうすればよいですか?
ありがとうございます!
イメージのURLを送信すると、このスニペットではローカルとAzureで動作します。私はこの問題のための回避策があるのだろうかと思います。うーん... – kcd
残りの問題は何ですか? – cthrash