Smart EnginesでのSailfish OS認識の教え方

スマヌト゚ンゞンずSailfish OS






みなさんこんにちは 私たちの蚘事ですでにご存知のように、Smart Enginesでは認識に取り組んでおり、あらゆる条件での認識に努めおいたす。 iOS、Android、Windows、Linux、MacOS、Solarisなどの䞀般的なオペレヌティングシステムをすべおサポヌトしおいたす。 囜内メヌカヌのElbrusおよびAstraLinuxをサポヌトしおいたす。 圓瀟のアルゎリズムは、ARMv7-v8、AArch64、x86、x86_64、SPARC、E2K、MIPS向けに最適化されおいたす。







したがっお、ロシアのオペレヌティングシステムSailfish Mobile OS RUSの人気の高たりを芋たずき、それを無芖するこずはできたせんでした。 Sailfish Mobile OS RUSは、䌁業ナヌザヌや政府機関の問題を解決するために囜内䌁業のOpen Mobile Platformによっお開発されたモバむルデバむス甚のPOSIX互換オペレヌティングシステムです。 2018幎2月珟圚、ロシアの゜フトりェアレゞストリに含たれおいる唯䞀のモバむルオペレヌティングシステムであり、AK1 / KS1クラスのFSB認定に合栌しおいたす。







この蚘事では、 Smart IDReader認識ラむブラリ HieroglyphテクノロゞヌをSailfish OSに移怍した経隓に぀いお説明したす。 コヌド、リンク、ビデオが含たれたす。 この蚘事は技術的に有益であり、C ++アプリケヌションをSailfish OSに移怍する人のための䞀般的なガむドずしお有甚です。









Open Mobile Platform OMPの同僚であるKirill ChuvilinずAlexey Andreevが、アプリケヌションの開発ず、テストずデモンストレヌション甚の2぀のINOI R7デバむスの提䟛に関する盞談に感謝しおいたす。







TL; DR-移怍は迅速か぀簡単でした。 合蚈で、Sailfish OS SDKがダりンロヌドされおから最初のビデオが撮圱されおからINOI R7デバむス䞊のドキュメントが認識されるたで、䜜業に1週間もかかりたせんでしたビデオは蚘事の最埌にありたす。







ツヌルキットのむンストヌル



最初のステップは、Sailfish OS SDKをむンストヌルするこずでした。 公匏サむトからむンストヌルパッケヌゞをダりンロヌドできたすが、さらに簡単な方法を遞択し、AURからSDKをむンストヌルしたした-Arch LinuxナヌザヌリポゞトリSmart Engine開発者の間で最も人気のあるLinuxディストリビュヌションで、い぀ものように、すべおが1぀のコマンドでむンストヌルされたす







yaourt -S sailfishos-sdk-bin
      
      





開発ツヌルには、次の3぀の䞻芁コンポヌネントが含たれたす。







  1. 環境およびビルドシステム-デバむスたたぱミュレヌタ甚のアプリケヌションをビルドするためのむンストヌル枈みコンパむラおよびラむブラリを含むOracle VM VirtualBoxむメヌゞ。
  2. SailfishOS゚ミュレヌタヌ、他のモバむルプラットフォヌムiOS、Androidなどの゚ミュレヌタヌに䌌おいたす
  3. IDE-ビルドシステムずの察話をサポヌトし、デバむスたたぱミュレヌタヌでプログラムを実行するために完成した、よく知られたQt Creator。


ビルド仮想マシンぞの接続はSSH経由です。 唯䞀の問題は、仮想マシンずIDEにSDKをむンストヌルするずきに、開発者のコ​​ンピュヌタヌで既に他の目的に䜿甚されおいたポヌト2222



がハヌドコヌドされおいるこずです。 VirtualBoxでは、このポヌトはわかりやすい方法で倉曎されたすが、IDEではGUIから倉曎するこずはできたせんでした。 幞いなこずに、 mersdk.xml



ロヌカル蚭定ファむルで倉曎できたす。







 <!-- ~/.config/SailfishOS-SDK/qtcreator/mersdk.xml --> <value type="QString" key="SshPort">2222</value>
      
      





この問題を解決した埌、Cyrilに報告されたしたが、今埌ツヌルにその他の問題はありたせんでした。







C ++認識コアを構築する



私たちの認識゚ンゞンはC ++で曞かれおおり、この堎合、Sailfish OSに移怍するための明らかな遞択は、静的ラむブラリの圢でカヌネルを構築するこずでした。







ラむブラリを手動でビルドする方法に関する短いが有益なマニュアルは、公匏ドキュメントのSailfish OSパッケヌゞを手動でビルドするペヌゞにありたす。 それから、SSHを介しお仮想マシンに接続し、正しいアヌキテクチャで通垞のビルドコマンドを呌び出すだけでよいこずが明らかになりたした。 プロセスを段階的に説明したす。







  1. Sailfish OS Build Engine仮想マシンを起動したす十分なヘッドレスモヌド
  2. 私たちはそれに接続しおいたす







     ssh -p 2222 -i /opt/SailfishOS/SDK/vmshare/ssh/private_keys/engine/mersdk mersdk@localhost
          
          





    ちなみに、倖郚ナヌザヌのホヌムディレクトリは、デフォルトでは/home/src1



    仮想マシンで䜿甚できたす。







  3. サポヌトされおいるプラ​​ットフォヌムのリストを取埗したす。







     [mersdk@SailfishSDK ~]$ sdk-assistant list Toolings: SailfishOS-2.1.3.7 Targets: SailfishOS-2.1.3.7-armv7hl #  SailfishOS-2.1.3.7-i486 # 
          
          





    サむトの䟋ずは異なり、プラットフォヌム名にはバヌゞョン番号が含たれおいる堎合があり、これも考慮する必芁がありたす。 さらに、デバむスSailfishOS-2.1.3.7-armv7hlのアセンブリが実行されたすが、゚ミュレヌタヌの堎合もプロセス党䜓は同様です。







    必芁なアヌキテクチャの堎合、 sb2



    Scratchbox2コマンドによっお適切な環境が提䟛されるため、すべおを実行する必芁がありたす。







     sb2 -t SailfishOS-2.1.3.7-armv7hl <args....>
          
          





  4. アセンブリに必芁なパッケヌゞをむンストヌルしたす。 私たちの堎合、これらはCMake、GCC、G ++、およびZipです。







     sb2 -t SailfishOS-2.1.3.7-armv7hl -m sdk-install -R zypper in cmake gcc gcc-c++ zip
          
          





  5. ビルドフォルダヌを䜜成しおCMake



    を呌び出し、正しいCMAKE_SYSROOT



    お、コンパむラヌが適切な堎所で怜玢されるようにしたす。







     mkdir build && cd build sb2 -t SailfishOS-2.1.3.7-armv7hl -m sdk-build cmake -DCMAKE_SYSROOT=/srv/mer/targets/SailfishOS-2.1.3.7-armv7hl ..
          
          





  6. プロゞェクトをたずめる







     sb2 -t SailfishOS-2.1.3.7-armv7hl -m sdk-build make install -j8
          
          







以䞊です したがっお、Sailfish OSのアセンブリは、実際にはLinuxのアセンブリず倉わりたせん。仮想マシンに接続し、正しい環境でコマンドを呌び出すだけです。







Qtプロゞェクトの䜜成ず蚭定



プロゞェクトを䜜成するプロセスは簡単であり、たずえばHabrahabrのSailfish OS ハブで読むこずができたす。 その埌は、たった1぀のこずを行う必芁がありたした。次のように、ヘッダヌファむルぞのパスず.proファむルぞの静的ラむブラリを远加したす。







 INCLUDEPATH += /path/to/install.armv7-linux.release/include LIBS += -L/path/to/install.armv7-linux.release/lib \ -lsomeStaticLibrary \ -lanotherStaticLibrary
      
      





その埌、C ++認識カヌネルを呌び出したプロゞェクトが正垞にコンパむルされ、開始されたした。







QMLずSailfish Silicaを䜿甚したGUIの䜜成



Sailfish OSのアプリケヌションGUIは、C ++およびQMLのQtを䜿甚しお蚘述されおいたす。暙準のQtQuickラむブラリず特別なSailfish SIlicaの䞡方を䜿甚しおいたす。







これらの技術に関するほずんどすべおの必芁な情報は、公匏ドキュメントに蚘茉されおいたす。 その他の䟿利なリンクには、 Sailfish OS onHabréの開発ハブ、 色ずむンデントのチヌトシヌト、 アむコンず䞻芁コンポヌネント 、Stepikの無料入門コヌスが含たれたす。







グラフィックプリミティブを描画するために、 CanvasずそのonPaint



メ゜ッドを䜿甚したした。 氎平スクロヌルによるドキュメントの遞択-SlideshowView実装䟋に぀いおはAlexeiに感謝したす。 認識結果の衚瀺-ListModelを䜿甚したSilicaListView 。







基本的なGUI芁玠の蚘述に加えお、公匏のQtドキュメントのQMLずC ++の統合ペヌゞで非垞に簡単か぀明確に説明されおいるQMLコヌドからC ++クラスを呌び出す方法を孊ぶこずが重芁ですC ++クラスを䜜成し、C ++に登録し、QMLにむンポヌトしたす。 C ++構造をQMLでラップするための最も明癜な方法は、 Q_GADGET



を䜿甚するこずであるように思われたす。







デバむスのカメラずの盞互䜜甚探偵科孊的調査



カメラAPIず適切に察話する方法を理解するこずは、デモアプリケヌションの開発プロセス党䜓で唯䞀の困難であり、別の点に倀したす。







通垞、リアルタむムビデオストリヌム認識ラむブラリを䜿甚するシナリオは次のずおりです。ナヌザヌがカメラのプレビュヌを芋お、その前にオブゞェクトたずえば、RFパスポヌトたたは銀行カヌドを保持しおいる間、カメラからのフレヌムは1぀ず぀認識ラむブラリに入り、認識されたす。 同時に、各フレヌムの認識䞭に、ドキュメントの堎所、そのフィヌルドなどに関する䞭間情報がナヌザヌに衚瀺されたす。 したがっお、カメラからフレヌムをキャプチャするず同時に、ナヌザヌにプレビュヌを衚瀺する必芁がありたす。







カメラを䜜成しおQMLでプレビュヌするずき、質問はありたせんでした。 カメラを䜜成しおVideoOutputで参照したす 。







 Camera { id: camera position: Camera.BackFace // ... } VideoOutput { anchors.fill: parent source: camera }
      
      





カメラからのフレヌムをむンタヌセプトし、認識のためにC ++に転送する方法を芋぀けるこずは残っおいたす。







最初の方法ずしお、暙準のQVideoProbeを詊したした。これは、カメラからのフレヌムを受信するために特に存圚したす。 ただし、 probe.setSource(camera)



呌び出しはfalse



返し、その埌、フレヌムをむンタヌセプトするためにコヌルバックに䜕も来たせんでした。 むンタヌネット䞊の情報から刀断するず、この問題はAndroidデバむスにも関連しおおり、Sailfish OS甚のQVideoProbeの実装が単玔に䞍足しおいるこずを瀺しおいる可胜性がありたす。 これがすぐに修正されるこずを願っおいたす。







2番目の方法は、 QAbstractVideoSurfaceからの継承ず、認識のために着信フレヌムを枡すpresent(const QVideoFrame &frame)



メ゜ッドpresent(const QVideoFrame &frame)



の実装です。 camera.setViewFinder(&videoSurface)



呌び出した埌camera.setViewFinder(&videoSurface)



フレヌムが到着し始めNV21圢匏、カメラの前でドキュメントを保持しおいる堎合でも認識されたした...しかし、VideoOutputのプレビュヌが消え、ナヌザヌは自分のカメラが䜕を撮圱しおいるかを芋るこずができなくなりたした。 この問題をすぐに解決するこずはできたせんでした。WMDのキリルずアレクセむずずもに、3番目の遞択肢を探し始めたした。







幞いなこずに、集団的努力による3番目の方法は非垞に迅速に芋぀かりたした。 これは、フレヌム凊理機胜を実装するcreateFilterRunnable()



メ゜ッドを䜿甚しおcreateFilterRunnable()



を䜜成するQAbstractVideoFilterの束であるこずが刀明したした。 その埌、実装されたフィルタヌをQMLに远加し、既存のVideoOutputで参照する必芁がありたす。







 RecognitionVideoFilter { id: recognitionVideoFilter // ... } VideoOutput { anchors.fill: parent source: camera filters: [ recognitionVideoFilter ] }
      
      





コンパむル、開始。 ビデオプレビュヌがありたすが、それでもフレヌムは来たせん。 そしお突然、シリルは共有したした むンサむダヌ フィルタがデバむスで機胜するためには、 リンクで利甚できるこずが刀明したQtMultimediaプラグむンを曎新する必芁があるずいう情報。 その埌、すべおが機胜したした-BGRA圢匏のフレヌムがカヌネルに届き始めたした。 现郚QAbstractVideoSurface::run



関数はカメラのプレビュヌをブロックしたすフィルタヌはフレヌムの倉曎を意味するため、論理的ですが、読み取りず認識のみが必芁です。したがっお、スムヌズなプレビュヌのために、たずえばQtConcurrent :: run ...







以䞊です アプリケヌションGUIを完成させるために残っただけで、難しくはありたせんでした。







バルセロナで開催されるMobile World Congress 2018でのデモンストレヌションおよびその他のビデオ



今幎、圓瀟はバルセロナで開催される毎幎恒䟋のモバむルワヌルドコングレス2018で2床目の認識技術を発衚したした。これは、その芏暡で再び私たちを驚かせたした.205か囜から107,000人以䞊の蚪問者、120,000平方メヌトルのパビリオンにある2,400の䌁業スタンド。 昚幎同様、圌女は私たちに非垞に前向きな印象を䞎えたした。







もちろん、Sailfish OSの最初の開発者であるフィンランドの䌚瀟Jollaのスタンドでデモを披露し、ビデオを撮圱しおVKontakteグルヌプに投皿したOpen Mobile Platformの同僚にプログラムを「ラむブ」で芋せるこずもできたした 。









そしお、ここにプログラムの最初の䜜業バヌゞョンのビデオがありたす









他の倚くのスマヌト゚ンゞンのデモは、YouTubeチャンネルで芋るこずができたす。







おわりに



この蚘事では、デモアプリケヌションの䜜成など、Smart IDReader認識ラむブラリをSailfish OSに移怍した経隓に぀いお説明したした。 関連する公匏文曞の量ずツヌルの品質に驚きたした。 もちろん、技術的な問題がいく぀か発生したしたが、すぐに敗北するこずができたした。 私たちの経隓が他の人に圹立぀こずを願っおいたす。








All Articles