2016-12-19 9 views
1

mjpgストリームからjpgフレームを引き出しています。これらは有効なjpgファイルで、私が試した画像ツールで動作します。しかし、Rekognitionは、それをBytesとして送信するとき、またはそれらをS3に移動してそのルートを試みるとき、それらを受け入れません。オリジナルフレームAWS Rekognition InvalidImageFormatException jpegソースがmjpegストリームの場合

-

私はいくつかのバージョン(attached here)、同じソースjpgからすべてが(私はインラインそれらが含まれるであろうが、私は画像最適化コードがそれらを変更する必要はありませんが)

test.jpg作りました

test-photoshop.jpg - (私はjpegtranで圧縮と信じている)ImageOptimを介して実行

探し - "Web用に保存" D

test-imageoptim.jpg、Photoshopで開きますこれらの16進エディターでは、私が見ることができない唯一の違いは、よりexifデータ(exiftoolを使用して)です。私がオリジナルでexiftoolを実行すると、フレームの基本的な詳細すべてが返されます。

私はこれがRekognitionのバグだと思っています、またはmjpegストリーム抽出が省略されていることを探している特定のexifビットがあります。たぶん誰かがmjpegからjpegフレームを引っ張るのがなぜ正しい開始および終了フレームバイトを付けるだけでできないのかについての情報を持っています。

+0

は最後の6つのバイトをオフにチョッピングしてみてください、ただの推測、最終 'FF D9'マーカの後、おそらくこれらのバイトは、Amazonが混乱しています。 –

+0

@ChrisOこれは動作します!だから多分mjpegストリームからフレームを抽出する私の方法は、ゼロバイトで最後を埋めることです。答えにこれを入れたら、私はそれを受け入れるでしょう – Will

答えて

1

ただ、推測、最終FF D9 マーカーの後、おそらくこれらのバイトは、アマゾンが混乱している、最後の6つのバイトをオフにチョッピングしてみてください。

ここ進ビューアからスナップです:

enter image description here

+0

これは正解でした。私はフレームのmjpgストリームを見て、それらを抽出し、prefとsoofとeofマーカーを追加しますが、amazonが好きではないeofの後にこのゼロバイトの尾を追加していたこともあります。他のアプリケーションでもうまくいくはずですが、jpgにeofマーカーは必要ないので、私は推測しています – Will

+0

JPEGにはEOFマーカーが必要です。しかし、多くのデコーダは、ヒットすると停止します。 – user3344003

0

あなたの画像は問題ありません。あなたのコードはバグであるか、あなたの権限が正しくありません。私は、問題を引き起こしているアプリケーションへのアクセスを持っていないので、私は唯一の推測をすることができます

{ 
    "url":"POST", 
    "face_detection":[ 
     { 
     "boundingbox":{ 
      "tl":{ 
       "x":470.77, 
       "y":109.23 
      }, 
      "size":{ 
       "width":53.85, 
       "height":53.85 
      } 
     }, 
     "confidence":0.25, 
     "eye_left":{ 
      "x":489.3, 
      "y":132.4 
     }, 
     "eye_right":{ 
      "x":498, 
      "y":128.9 
     }, 
     "nose":{ 
      "x":504.1, 
      "y":142.5 
     }, 
     "mouth l":{ 
      "x":497.7, 
      "y":152.1 
     }, 
     "mouth_l":{ 
      "x":497.7, 
      "y":152.1 
     }, 
     "mouth r":{ 
      "x":502.4, 
      "y":151.9 
     }, 
     "mouth_r":{ 
      "x":502.4, 
      "y":151.9 
     }, 
     "pose":{ 
      "roll":-27.01, 
      "yaw":86.01, 
      "pitch":-12.56 
     }, 
     "quality":{ 
      "brn":0.22, 
      "shn":0.1 
     }, 
     "emotion":{ 
      "happy":0.25, 
      "surprised":0.09, 
      "sad":0.07 
     }, 
     "age":30.11, 
     "smile":0.71, 
     "glasses":0.79, 
     "sunglasses":0.87, 
     "beard":0.96, 
     "mustache":0.52, 
     "eye_closed":1, 
     "mouth_open_wide":0.04, 
     "beauty":0.5041, 
     "sex":1 
     } 
    ], 
    "ori_img_size":{ 
     "width":640, 
     "height":480 
    }, 
    "usage":{ 
     "quota":98, 
     "status":"Succeed.", 
     "api_id":"XXXXXXXXXXXXXXXXXXXX" 
    } 
} 
+0

私はそれが可能であるか分かりません。私はAWS https://console.aws.amazon.com/rekognition/home?region=us-east-1#/label-detectionのRekognitionコンソールにtest.jpgを直接アップロードしようとしましたが、同じエラーで失敗します。私はnode.jsからsdkを通して有効な画像もアップロードしています。上記の@chris_oのコメントは、eofマーカーの後のすべてを取り除いて動作します。本当にapiを通してtest.jpgをアップロードして有効な結果を得ることができますか? – Will

+0

コンソールを試しました。"不正なリクエスト(400) - InvalidImageFormatException イメージのエンコードが無効です"。私の推測では、コンソールは予備チェック/検証のようなものです。 –

+0

APIはうまく動作します。 –

0

:私は結果であり、あなたのtest.jpg、ここでhttps://github.com/yourtion/Rekognition_API_NODEJS_SDKを使用しました。しかし、私の推測では、JPEGストリームのファイル形式(またはその欠如)を認識しないということです。

画像の開始マーカーのすぐ後にフレームマーカーの開始点があります。これはJPEG規格によれば合法です。ただし、ファイル形式を示すものはありません。これは、JPEGストリームを解釈するためには厳密には必要ではありませんが(3成分スキャンはYCbCrでエンコードされていると仮定しますが)、アプリケーションでフォーマット固有のマーカー(JFIF、EXIFなど)を探している可能性があります。コメントから

関連する問題