2017-10-15 10 views
1

私はEmotion APIサブスクリプションキーをピクチャに使用するだけですが、ビデオ用には使用しません。 API Testing Consoleを使用するのか、Pathon 2.7でEmotion APIを呼び出すのかには違いはありません。操作-場所を開くときに、私は応答ステータス202受理を取得する両方のケースでは、しかし、それはレスポンス202はAPIテストコンソールとPython 2.7でVideo用Microsoft Emotion APIを使用しているときに無効なサブスクリプションキー

サービスが受け入れられたことを意味することを言う感情APIの説明ページで

{ "error": { "code": "Unauthorized", "message": "Access denied due to 
invalid subscription key. Make sure you are subscribed to an API you are 
trying to call and provide the right key." } } 

を語ります後でそのプロセスを開始します。 応答には、 "Operation-Location"ヘッダーがあります。クライアント側はさらに、このヘッダーで指定されたURLから操作ステータスを照会する必要があります。

次に、Response 401があります。これはまさに私のOperation-Locationに含まれています。私はなぜレスポンス401のようなレスポンス202が得られるのか分かりません。

私はインターネット上で見つけた少なくとも3つのコードバージョンを使ってPythonでAPIを呼び出そうとしています。 _url = 'https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognizeInVideo'_url = 'https://api.projectoxford.ai/emotion/v1.0/recognizeInVideo'を変更しても解決しないことを Microsoft Emotion API for Python - upload video from memory のpython-アップロード・ビデオ・から・メモリ

import httplib 
    import urllib 
    import base64 
    import json 
    import pandas as pd 
    import numpy as np 
    import requests 

    _url = 'https://api.projectoxford.ai/emotion/v1.0/recognizeInVideo' 
    _key = '**********************' 
    _maxNumRetries = 10 

    paramsPost = urllib.urlencode({'outputStyle' : 'perFrame', \ 
          'file':'C:/path/to/file/file.mp4'}) 
    headersPost = dict() 
    headersPost['Ocp-Apim-Subscription-Key'] = _key 
    headersPost['content-type'] = 'application/octet-stream' 
    jsonGet = {} 
    headersGet = dict() 
    headersGet['Ocp-Apim-Subscription-Key'] = _key 
    paramsGet = urllib.urlencode({}) 

    responsePost = requests.request('post', _url + "?" + paramsPost, \ 
    data=open('C:/path/to/file/file.mp4','rb').read(), \ 
    headers = headersPost) 

    print responsePost.status_code 

    videoIDLocation = responsePost.headers['Operation-Location'] 
    print videoIDLocation 

注:、私はここのコードを発見しました。

しかし、その後私は待っておきに半分の時間を実行します。

getResponse = requests.request('get', videoIDLocation, json = jsonGet,\ 
    data = None, headers = headersGet, params = paramsGet) 

    print json.loads(getResponse.text)['status'] 

結果が時間「実行」されていて、私のビデオが長いだけで約半分の時間です。

私のテストコンソールの外観は次のとおりですTesting Console for Emotion API, Emotion Recognition in Video ここでは、インターネットで利用できる長さ約5分の別のビデオを使用しました。私は別の使用例を再び私に応答ステータス202受理を取得し、非常によく似たコードを使用しています

https://benheubl.github.io/data%20analysis/fr/ 

でビデオを発見し、操作-場所を開くときにサブスクリプションキーは、ここで

間違っていますコード:

import httplib 
import urllib 
import base64 
import json 
import pandas as pd 
import numpy as np 
import requests 



# you have to sign up for an API key, which has some allowances. Check the 
API documentation for further details: 
_url = 'https://api.projectoxford.ai/emotion/v1.0/recognizeinvideo' 
_key = '*********************' #Here you have to paste your 
primary key 
_maxNumRetries = 10 

# URL direction: I hosted this on my domain 
urlVideo = 'http://datacandy.co.uk/blog2.mp4' 

# Computer Vision parameters 
paramsPost = { 'outputStyle' : 'perFrame'} 

headersPost = dict() 
headersPost['Ocp-Apim-Subscription-Key'] = _key 
headersPost['Content-Type'] = 'application/json' 

jsonPost = { 'url': urlVideo } 

responsePost = requests.request('post', _url, json = jsonPost, data = None, 
headers = headersPost, params = paramsPost) 
if responsePost.status_code == 202: # everything went well! 
    videoIDLocation = responsePost.headers['Operation-Location'] 
    print videoIDLocation 

は、インターネット上の別の例があり、それらはすべてが動作しますが、私のために働いたことはありませんそれらのいずれかを複製するように見えます。誰が何が間違っている可能性が考えられますか?

答えて

0

Emotion APIのビデオ機能は10月30日に廃止されるため、手順をスクリーンショットに変更する必要があります。

質問:あなたの結果にアクセスできるURLがAPIから返されます。あなたのブラウザでこのURLを開くことはできません。これは "無効なキー"の通知を与える代わりに、あなたのキーを含むこのURLをpythonで再度呼び出す必要があります。 スコアを取得する方法を私のコードに投稿します。私はPython 3を使用していますので、調整が必要な場合があります。 「トリッキーな」ポイントだけが操作IDを取得しています。これはあなたの要求につながるURLのID(私の場合はlocation)です。サブスクリプションキーなどの残りのパラメータは以前と同じです。

#extract operation ID from location-string 
OID = location[67:] 
bod = "" 

try: 
    conn = 
    http.client.HTTPSConnection('westus.api.cognitive.microsoft.com') 
conn.request("GET", "/emotion/v1.0/operations/"+OID+"?%s" %params, bod, headers) 
    response = conn.getresponse() 
    data = response.read() 
    print(data) 
    conn.close() 
except Exception as e: 
print("[Errno {0}] {1}".format(e.errno, e.strerror)) 
+0

は「エモーションAPIのビデオ機能は、10月30日に退任するので、多分あなたはとにかくスクリーンショットにあなたの手順を変更する必要があります。」 - > これは悪いニュースです。あなたはこの情報をどこから入手したかを明確にしてください。 – trekma

+0

これに公開情報が見つかりませんでした。 「Microsoft Cognitive Services Emotion API Preview」では、さまざまな感情を検出するために顔を分析することができます。顧客が最も価値のある機能やサービスを効率化するために、 **ビデオ内の人々の表情を認識し、その感情の要約を返すビデオ機能は、2017年10月30日に廃止される予定です** ** "もしあなたがそれに頼りすぎている場合は、直接サービスに連絡する必要があります。 – Phi89

0

curlを使用してAPI呼び出しが機能していることを確認しましたか?最初にcurlを使用して呼び出しをプロトタイプ作成してください。 curlでは動作しますが、Pythonでは動作しない場合は、Fiddlerを使用してAPI要求と応答を観察してください。

関連する問題