sebo
@sebo (山田 せぼんぬ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JavaとPython間で値の受け渡しは可能か?

JavaとPython間で値の受け渡しはできますか?

AndroidStudioで瞬き検知を作ろうと考えています。

最初はJavaで実装しようと考えていましたが、調べるとPythonやJSでばかりでJavaで記述されたものが見当たりませんでした。(海外サイトではそれっぽいのがありましたが理解不能でした。)

そこで、Pythonで記述されたコードで瞬き検知を行い、瞬き回数などの値を渡しJavaで読み取るということはできますでしょうか?
また、Javaで瞬き検知できるよさそうなサイトがあればどなたか教えていただけないでしょうか。

0

3Answer

Pythonで記述されたコードで瞬き検知を行い、瞬き回数などの値を渡しJavaで読み取る

これはAndoroid上のPythonプログラムで瞬き検出を行うということでしょうか、
それとも別のマシンでPythonを動かし、その結果のみAndoroidで受け取るという意味でしょうか?
実行する環境によって使用できるPythonも変わってくるため、それを抜きにして答えは出せません。
ちなみにJythonはAndoroidでは動かせないらしいです。

それと瞬き検出で検索するとOpenCVとDlibの組み合わせが多く見つかるのですが、これらを使うならAndoroid上で動作するかは確認しましたか?
(OpenCVもDlibもAndoroid向けが用意されていて、それらは当然ながらjavaで使う前提になっているようでした。)

1Like

Comments

  1. @sebo

    Questioner

    Jythonは動かないんですね…
    https://cysec.ise.ritsumei.ac.jp/2022/11/03/android-studio-で-python-を使う/
    こちらのサイトを見てAndroidStudio上でPythonを使うしかないと考えていました。

    OpenCVもDlibもAndoroid向けでJavaで使う前提になっているとのことですが、私が検索した限りでは下記のサイトを筆頭にPythonやJSで記述されたものしか発見できませんでした。
    https://qiita.com/mogamin/items/a65e2eaa4b27aa0a1c23

    ご面倒をおかけしますがそう書かれたサイトのURLを貼っていただけないでしょうか💦
  2. いやいや、「OpenCVやDlibをどういう環境で動かすのか」をすっ飛ばして「OpenCVやDlibをどの言語で利用するのか」を気にしても無意味ですよ。
    「AndroidStudio上でPythonを使う」を実現してもそれは「AndroidでOpenCVやDlibを利用できる」という意味にはなりません。

    OpenCVやDlibはPythonからも利用できるようになっています。この場合のPythonとは普通に考えれば python.org がリリースしている公式のPythonのことですよね。
    一方、Androidには公式のPythonが存在せず、かわりにChaquopyなどを利用する必要があります。
    Android用のOpenCVやDlibは存在しますが、Androidには python.org の公式なPythonが存在しないため、Android用のOpenCVやDlibがPythonから利用できるようにAPIを用意しているかとなると、疑わしいです。

    だから探すならまずは「AndroidでOpenCVやDlibを使う方法」です。

    ○OpenCV
    Android StudioでOpenCVを使う(ほぼセットアップのみ) https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802
    OpenCV4Android Samples(コードの書き方) https://opencv.org/opencv4android-samples/

    ○Dlib
    tzutalin/dlib-android: Port dlib to Android(公式のものではなく、有志によりAndoroid用を作成) https://github.com/tzutalin/dlib-android
    tzutalin/dlib-android-app(dlibを利用するサンプルコード。↑の理由によりチュートリアル的なものは無いようで、サンプルコードがあるだけまし) https://github.com/tzutalin/dlib-android-app/tree/d0170613f36046b8e122a5de651029ecb1af947e

    上記のリンク先はあくまで「ライブラリの使い方」までで、瞬き検出の方法まではありません。
    そこはPathonやJSで書かれたものを参考にして、自力でjava用のコードを書かないといけないでしょう。
    かなり大変だと思います。

    ChaquopyはjavaのAPIにもアクセスできるようになっているのでChaquopyでOpenCVやDlib利用することも可能だろうと思いますが、Python用のAPIではなくjava用のAPIを使うことになるため「目のまばたき検知をDlibとOpenCVを組み合わせて数十行で作る」のコードをそのまま利用できず、情報の少なさからjavaでコードを書くより大変かもしれません。
    (Chaquopy、Dlib、OpenCVそれぞれのマニュアルを読み込んでやり方を探ることになると思うから)
  3. @sebo

    Questioner

    ご丁寧にありがとうございます。Javaでコードを書くより大変かもしれないということでしたので、ほかの方がおっしゃっていたようにMLKitを活用しようと思います。(PythonからJavaに変換できるほどの知識もないので…)
    とてもわかりやすかったです。ありがとうございました!

2つの言語が混ざると厄介なので、ML Kitで顔検出し、得られたFaceからgetLeftEyeOpenProbability()および、getRightEyeOpenProbability()(目をどれぐらい閉じているか)の値で推論するやり方はいかかでしょう。

瞬き検出の機能はありませんが、それぞれの値が大きく変化したら「瞬きした」と見なせば同等になるでしょう。

1Like

Comments

  1. @sebo

    Questioner

    確かにいけるかもしれませんね!OpenCVなどを使った顔検出より、日本語サイトの説明も多そうなのでできる気がしてきました。MLKitを活用する路線で開発していこうと思います!回答ありがとうございました。

Jythonというのがあるみたいです(私は知らなかった

apiとして渡す
ファイルとして渡す(json

が別言語間のやり取りとして一般的だと思いますがどうでしょう

0Like

Comments

  1. @sebo

    Questioner

    Jythonというもの私も初めて知りました。
    調べてみましたがPythonで記述するんですね!一つの方法として考えてみます。ありがとうございますm(__)m

Your answer might help someone💌