画像でQRデータの検出と抽出を呼び出すことができるものがあれば、何がありますか?
これまでのところ、QRCodeスキャン用にZXingライブラリを参照している記事はたくさんありましたが、私にとっては有効なソリューションであることがわかりませんでした。他の数人がQRCodeスキャンの代替案を求めてきましたが、有用なフィードバックは見ていません。アクティビティを起動せず、独自のアプリケーションの外部を呼び出さないQRコードライブラリのその他のオプションについては、コミュニティにもう一度尋ねるかもしれません。 Camera2 APIからの画像を非常に単純な方法でスキャンする必要があります。複雑なライブラリであってはなりません。この方法でそれについて話す例や個人を見たことはありませんでした。
実際、オペレーティングシステム内のカメラライブラリまたはGoogle SDK内の同様の場所に、QRCode機能のネイティブ実装が追加されていない理由について、実際に私は困惑しています。
別のアプリケーションを呼び出して要求する(またはダウンロードを要求する)ことはエレガントなソリューションではなく、ユーザーがそのようなことを行うことに屈するべきではありません。開発者として、画像またはフレームからQRCodeを抽出できるライブラリにアクセスし、エンコードされたデータを削除する必要があります。
元のZxingライブラリに取り組んでいたSean Owenや他の人々は、過去数年間バーコードライブラリを扱うアプローチを提供してきましたが、Googleはついにqrとバーコードを処理するためのGoogle Play Servicesの公式リリースを発表しました。
バーコード検出ライブラリ について説明します。これらのライブラリを含めると、スムーズな統合が実現します。キャプチャした画像からこれらの結果を得るためのサンプルコードを再投稿します。現時点では、この公式リリースの回答を更新したかったのです。これが実際にこの情報を取得する良い方法を提供する場合(フープや合併症を飛び越えることなく)、ソースで更新し、受け入れられた答えとしてこれをチェックします。
Googleが過去1年以内に提供した検出ライブラリは、操作しやすいライブラリです。カメラAPIとの迅速な統合を可能にし、簡単に情報を抽出します。これは、私が認識を進めていくことをお勧めするコンポーネントです。 Qrコードを処理するための簡単なスニペットを以下に示します。いくつかの疑似コードもそこに残っています。
public final void analyzeFrameForQrCode(byte[] qrCodePictureF, int imageFormatF, XriteSize previewWindowSizeF)
{
if(!qrCodeDetectionPossible() || qrCodePictureF == null || mIsAnalyzingQrCodeFrame)
{
return;
}
... //Bitmap conversion code
Frame frame = new Frame.Builder().setBitmap(pictureTaken).build();
SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
if(barcodes != null && barcodes.size() != 0)
{
Barcode qrCode = barcodes.valueAt(0);//barcodes.get(Barcode.QR_CODE);
if(qrCode != null)
{
if(extractInformationFromQrCode(qrCode.rawValue)) {
mIsRequestingBarcodeDetection = false;
vibrateForQrCodeDiscovery();
((Activity)mContext).runOnUiThread(new Runnable() {
@Override
public void run()
{
hideBarcodeDetection(true);
}
});
}
}
}
... //Cleanup and code beyond Qr related material
}
}
もちろん、利用できる他の呼び出しがあります。しかし、実際には数行しかありません。ただし、ライブラリを使用してフレームを分析するサービスは、デバイスにはデフォルトではありません。したがって、同様に計算する前に、ライブラリが利用可能かどうか(インターネットが利用できない場合など)を確認する必要があります。これは少し面倒です。サポートライブラリの一部として今後使用されるデバイスの更新として、またはすべてのデバイスに送信されるGoogleサービスとして利用できると想定していました。ただし、これらのライブラリ呼び出しを使用するには、まず外部サービスとの通信が必要です。一度これを行うと、そのデバイスはその瞬間から良好です。
私の小さな例では、チェック後にトーストをポップアップし、アクティビティから戻って、ユーザーに接続をチェックさせます。これは、少量のサンプルコードでも実行できます。
if(!mBarcodeDetector.isOperational())
{
updateUserInstructions("The barcode library cannot be downloaded");
return false;
}
編集(更新):
バーコード検出に利用できる最新のGoogle Play Services Visionライブラリを使用してからかなりの時間が経過しました。ライブラリをwifi経由でダウンロードする必要があるという制限は確かに制限ですが、それは1回限りのプロセスです。正直に言うと...
...デバイスが接続されます。ライブラリ自体はバックグラウンドでダウンロードされるため、ダウンロードに問題がない限り、その発生に気付くことさえありません。その後、インターネットへの接続を有効にするなどの適切な修正措置を報告する必要があります。
もう1つの注意点は、ライブラリをアプリケーションに統合する方法に関して、少し注意が必要なことです。ライブラリプロジェクトとして使用すると、一部のデバイスで機能し、その後他のデバイスで失敗しました。 jarをビルドパスに追加すると、より多くのデバイスで機能しました(すべてである可能性がありますが、問題は解決しました)。そのため、今のところプロジェクトに含める場合は、セカンダリメソッドを使用して実行します。
Android QRCode Scanner Library
これはあなたを助けるかもしれません、このライブラリは外部アプリケーションのダウンロードや使用を必要としません。これをアプリに直接統合し、QRコードのスキャンに使用できます。
https://github.com/dm77/barcodescanner
このwikiは、アプリとの統合に役立ちます。
https://github.com/dm77/barcodescanner/blob/master/README.md
MobileVisionBarcodeScanner (このパッケージの作成者であることに注意してください)も確認できます。 GoogleのモバイルビジョンAPIを使用しています。概要 here も参照してください。
このライブラリをアプリで使用しました。 xingでも動作しますが、サードパーティ製のアプリケーションは必要ありません。さらに、それは本当に使いやすいです。
https://github.com/journeyapps/zxing-Android-embedded
たぶん、あなたはこのようなものを検索しました。
探しているライブラリはすでに見つかっていると思います。 core/
モジュール:
https://github.com/zxing/zxing/tree/master/core
Intent
ベースの統合を見ているだけですが、実際には、コアスキャンは独自のスタンドアロンライブラリであり、独自のアプリに埋め込むことができます。
Intent
ベースの統合は、ほとんどの場合に最適であると思います。単純であるため、ほとんどの人は、コアの上に独自のスキャンUIなどを再実装する時間がありません。ほとんどのデバイスにはバーコードスキャナーが既にインストールされているため、通常はダウンロードする必要はありません。
それでも、選んでください。そのため、少なくとも2つの使用方法があります。