2016-12-23 1 views
0
//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-botVision 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 "

そしてそれはただ止まります。

誰もこのような問題に遭遇しましたか?この問題を解決するにはどうすればよいですか?

ありがとうございます!

答えて

0

画像URLをお持ちの場合は、そのままストリームを作成するのではなく、そのURLでAnalyzeImageAsyncと電話するだけです。ローカルドライブ/ネットワーク上のファイルには、Fileクラスを使用する必要があります。ストリームを作成することで、イメージを一旦VMにダウンロードし、ビジョンサービスにアップロードして作業を2倍にします。

+0

イメージのURLを送信すると、このスニペットではローカルとAzureで動作します。私はこの問題のための回避策があるのだろうかと思います。うーん... – kcd

+0

残りの問題は何ですか? – cthrash

関連する問題