2016-12-23 11 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-bot.Vision API C# - чтение URL-адреса сохраненного изображения в Azure

Как и код, он делает то, что он может делать при запуске локально, но чтение URL-адреса изображения из загруженного файла не работает после того, как я опубликовал свой бот для Azure и запустил его оттуда.

Я попытался отладить, добавив Visual Studio непосредственно к моему опубликованному боттеру webapp в Azure. Похоже, что webapp не может прочитать URL-адрес сохраненного изображения из хранилища временного хранилища сервера Azure или не может получить доступ к хранилищу временного хранилища.

Эта линия:

uploadedImageUrl = HttpUtility.UrlDecode(uploadedImageUrl.Substring(uploadedImageUrl.IndexOf("file=") + 5)); 

показывает следующее значение: "https://bcattachmentsprod.blob.core.windows.net/at4984/Gv4cOx6OdSl- оригинальный"

Затем эта линия:

using (Stream imageFileStream = File.OpenRead(uploadedImageUrl)) 

Изменяет значение: «с: // bcattachmentsprod.blob.core.windows.net/at4984/Gv4cOx6OdSl-original "

А потом он просто останавливается.

Неужели кто-нибудь сталкивался с такой проблемой? Как мне решить эту проблему?

Спасибо!

ответ

0

Если у вас есть URL-адрес изображения, вы должны просто вызвать AnalyzeImageAsync с этим URL-адресом, а не создавать поток, как есть. Класс File должен использоваться для файлов на вашем локальном диске/сети. Создавая поток, вы загружаете изображение один раз на свою виртуальную машину, а затем загружаете его в службу видения, удваивая работу.

+0

Отправка URL-адреса изображения выполняется локально и в Azure для этого фрагмента. Интересно, есть ли работа для этой проблемы. Хммм ... – kcd

+0

Какова остальная проблема? – cthrash

 Смежные вопросы

  • Нет связанных вопросов^_^