10

Javaを介してプログラムで画像を「何らかの文字列」に変換して、Google画像検索で検索するためのパラメーターとして渡すにはどうすればよいですか。実際、私は画像の base64 変換をいくつか行いましたが、Google が画像検索エンジンで行っているものとは異なります。私はそのような変換を行いました(Java 7):

import javax.xml.bind.DatatypeConverter;
...
            Path p = Paths.get("my_photo.JPG");
            try(InputStream in = Files.newInputStream(p); 
                    PrintWriter write = new PrintWriter("base64.txt");
               ) {
                byte [] bytes = new byte[in.available()];
                in.read(bytes);
                String base64 = DatatypeConverter.printBase64Binary(bytes);
                write.println(base64);

            } catch(IOException ex) {
                ex.printStackTrace();
            }

この単純なプログラムの出力は、url の Google の文字列とは異なります。後に続くあの紐の話をするtbs=sbi:AMhZZ...

4

5 に答える 5

13

これは、画像検索がどのように機能するかについての私の最良の推測です。

URLのデータは、画像のエンコードされた形式ではありません。データは、あいまいマッチングに使用される画像フィンガープリントです。

検索用に画像をアップロードする場合、2段階のプロセスであることに注意してください。最初のステップでは、URLを介して画像をアップロードしhttp://images.google.com/searchbyimage/uploadます。Googleサーバーは指紋を返します。次に、ブラウザは指紋に基づくクエリ文字列を含む検索ページにリダイレクトされます。

Googleが指紋を生成するためのアルゴリズムを公開しない限り、アプリケーション内から検索クエリ文字列を生成することはできません。それまでは、アプリケーションに画像をアップロードURIに投稿させることができます。応答を解析してクエリ文字列を作成できるはずです。

編集

これらは、ファイルをアップロードしたときにサーバーに送信されたキーと値です。

image_url       =
btnG            = Search
encoded_image   = // the binary image content goes here
image_content   =
filename        =
hl              = en
bih             = 507
biw             = 1920

「bih」と「biw」は寸法のように見えますが、アップロードされたファイルに対応していません。

この情報は自己責任で使用してください。これは文書化されていないAPIであり、アプリケーションを変更したり壊したりする可能性があります。

于 2011-09-28T16:27:17.247 に答える
3

@Ajitの回答に基づいて、これは同じことを行いますが、curlコマンドを使用します(Linux / Cygwin /など)

curl -s -F "image_url=" -F "image_content=" -F "filename=" -F "h1=en"  -F "bih=179" -F "biw=1600" -F "encoded_image=@my_image_file.jpg" https://www.google.co.in/searchbyimage/upload

これにより、標準出力に URL が出力されます。curlまたはを使用してその URL をダウンロードできますがwget、ユーザー エージェントを Chrome などのグラフィカル Web ブラウザーのユーザー エージェントに変更する必要がある場合があります。

于 2014-10-31T16:54:15.323 に答える
1

これは私にとってうまくいくものです。実際にはエンコードは必要ありません。

https://www.google.com/searchbyimage?image_url=YOUR_IMAGE_URL
于 2020-07-16T16:51:06.613 に答える