2017-05-23 3 views
0

私は、Cognitive Vision APIを使用して解析用の画像を含むフォルダを渡すためのPythonコードを作成しています。私のコードは、オンラインでホストされている画像にURLを使用するとうまく動作します。ローカルマシンからMicrosoft Cognitive Visionに画像をアップロードするPythonメソッド

ただし、ローカルマシンから画像を渡している間にいくつかの問題があります。私はURLを使用してファイルパスを変換しようとしました:

imageurl = pathlib.Path(path).as_uri() 

これを実行する方法はありますか?私は約2000の画像を分析する。

この投稿Uploading an image to Microsoft Cognitive Services?は、C#を使用してそれを行う方法についていくつかの洞察を提供しますが、私はPythonのための類似のドキュメントは見つかりませんでした。

ありがとうございます。

+0

だけでURLとしてパスを取得する魔法のインターネット上でそれを利用可能にしません。画像をどこかにアップロードしないだけの理由はありますか? – kindall

+0

私はdropboxで画像をアップロードしようとしましたが、アップロード後に画像ファイル名が変わります。私はすべての画像ファイル名を含むリストを持っていますが、ファイル名が変更された場合はそのリストを使用できません – SvckG

答えて

1

コンピュータビジョンのAPIのドキュメントでは、次のように述べ:

リクエストボディ:POST本体内で渡さ

入力。サポートされている入力メソッド:raw image binaryまたはimage URL。

このように、画像がオンラインで(URLを介して)利用できない場合、生のバイナリをPOST要求の本体として渡す必要があります。

ここには、Requestsライブラリを使用した例があります。

import requests 

img_filename = '<your image path and filename>' 
with open(img_filename, 'rb') as f: 
    img_data = f.read() 

# you'll need to define the following variables yourself: 
# - params 
# - header 

r = requests.post(api_url, 
        params=params, 
        headers=header, 
        data=img_data) 

また、あなたに役立つブログ記事があります:Using Microsoft Cognitive Services to perform OCR on imagesこれには、画像をアップロードして結果を取得するためのPythonのサンプルコードが含まれています。これは、コンピュータビジョンAPIのOCRの部分を使用しますが、あなたがしようとしているものに似ているはずです。

+0

ありがとうございます、私はあなたのブログ記事を見ました。私はapi_urlとしてhttps://westus.api.cognitive.microsoft.com/vision/v1.0/analyzeを使用していますが、URLの要求が不正です:https://westus.api.cognitive.microsoft.com/vision /v1.0/analyze?language=en&visualFeatures=Description%2C+Categories%2C+color%2C+adult – SvckG

+0

ありがとうございます@クリストフ、それは今動作します – SvckG

2

さらに、前に述べたことは、「ヘッダー」部分で「json」から「オクテットストリーム」に変更する必要があります。ドキュメンテーションスタイルに従えば、次のようになります。ここで

headers = { 
    'Content-Type': 'application/octet-stream', 
    'Ocp-Apim-Subscription-Key': 'XXXXXXX', 
} 
try:  
    body = open('User/........', "rb").read() 
    conn = http.client.HTTPSConnection('westus.api.cognitive.microsoft.com') 
    conn.request("POST", "/emotion/v1.0/recognize?%s" % body, headers) 
    response = conn.getresponse() 
    data = response.read() 
    print(data) 
    conn.close() 
except Exception as e: 
    print(e.args) 
+0

ニースは私のために働く – Selva

2

あなたが行く:

import urllib, json 
import requests 

img_filename = 'RH_Louise_Lillian_Gish.jpg' 
with open(img_filename, 'rb') as f: 
    img_data = f.read() 

# Replace the subscription_key string value with your valid subscription key. 
subscription_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' 

## Request headers. 
header = { 
    'Content-Type': 'application/octet-stream', 
    'Ocp-Apim-Subscription-Key': subscription_key, 
} 

# Request parameters. 
params = urllib.urlencode({ 
    'returnFaceId': 'true', 
    'returnFaceLandmarks': 'false', 
    'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise', 
}) 

api_url = "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?%s"%params 

r = requests.post(api_url, 
#     params=params, 
        headers=header, 
        data=img_data) 

print (r.json()) 
関連する問題