gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

Mac+PythonでiPhoneをカメラとして使う

2024-10-31 20:47:26 | Mac
MacのPytthonでカメラを使う機会があったのですが、Mac内臓のカメラでは使い勝手が悪いのでiPhoneをカメラ代わりにに使ってみることにしました。
Appleサポートを見ると使えそうです。

https://support.apple.com/ja-jp/guide/mac-help/mchl77879b8a/15.0/mac/15.0

pythonで使う場合のことは書かれていないのですが、このマニュアルに従ってFaceTimeを動かし、それと並行して自作のpythonプログラムを動かせばいいだけです。(jupyterlabではカメラそのものが動きません)
インターネット上を見るとVideoCaptureのdeviceIDは0で良いような記載が見受けられるのですが、私の場合は1で動作しました。

Mac側はFaceTimeを起動するだけですが、iPhone側は上記のマニュアルに従い、

「設定」 >「一般」>「AirPlayとHandoff」と選択してから、「連係カメラ」をオンにする。

これだけですが、詳細は上記マニュアルを参照してください。

!!! 追記 一度Pythonでカメラを認識すると、次回からはFaceTimeを起動しなくても、pythonだけでカメラを使えるようです



Mac Jupyterlabでカメラが使えない。

2024-10-30 18:55:16 | Mac
MacのJupyterlabでカメラを使おうとしたのですが使えません。Macのプライバシーとセキュリティで許可されていないからのようです。
jupyterlabはSafari上で動作しているので、Safariを許可する(Local hostを)ことも試したのですが、でだめでした。
仕方ないので、jupyterlabのコードをpython形式に変換し、ターミナル上でプログラムを実行することでことなきを得ました。

変換はターミナル上で jupyter nbconvert --to python xxxxx.ipynb で行えます。

ターミナルの許可設定は、アップルマーク → システム設定 → プライバシーとセキュリティ の順でターミナルを許可します。

Macでビープ音を鳴らすpythonルーチン

2024-10-30 18:54:34 | Mac
Pythonでプログラムを組んでいるとあるタイミングでビープ音を鳴らしたいケースがあリます。
いろんなやり方があるようですが、できるだけ余計なライブラリをインストールしたくないということで、標準のosライブラリを使うことにしました。

import os

def macBeep(duration):
snd = 'afplay /System/Library/Sounds/Glass.aiff --time dur'
snd = snd.replace('--time dur', '--time ' + str(duration))
os.system(snd)

macBeep(0.1)

これでMacのSystem/Library/Soundsディレクトリにあるサウンドを鳴らすことができます
このディレクトリにはGlass.aiffの他にもサウンドファイルがありますのでお好きなのを選択してください。
パラメータのdurationはサウンドを流す時間(秒)です。何も設定しないと一秒以上鳴り終わるまで待たないといけないので、短い値を設定した方がいいです。

snd = 'afplay /System/Library/Sounds/Tink.aiff --help' を使用するとafplay のヘルプメッセージが表示されます

以下のようなサウンドがあります
snd = 'afplay /System/Library/Sounds/Blow.aiff --time dur'
snd = 'afplay /System/Library/Sounds/Tink.aiff --time dur'

tesseract OCRの精度

2024-10-24 21:14:30 | Python
Pythonで使えるOCRソフトtesseractを使ってみて、その精度はどれぐらいなのか気になったので、調べてみました。
OCRソフトなので文章で本来評価すべきでしょうが、それで評価するのはかなり大変です。それで自動車のナンバープレートの数字で評価しました。

数字も一連番号で評価しようとすると一桁の数字などではかなり誤検知すしました。ですので0から9までの単独の数字で評価します。
すっかりMNISTの評価と同じみたいになってしまいますが、ナンバープレートの数字はちょっと特殊ですのでやってみました。

tesseractを使用する上でのパラメータは、言語、builder、layoutがあります。
今回は、
言語: eng
builder builders.TextBuilder
layout: 1から13までありますが6から13までを評価しました。なお、11と12はほぼ精度は0でした。

builderにはText以外にもWordBox、LineBox、DigitLineBoxもありますが、それぞれクセがあって、まったく同じ結果にはなりませんでした、ほとんど同じということで使うならばTextで十分かと思われます。
layoutは今回の評価では13が最も精度が良かったですが、13で誤検知しても他のlayoutでは正しく検知しているケースもありました。
普段13を使用して、誤検知している文字があったならば、6などのlayoutの結果で編集し直すのがいいかもしれません。

精度が悪かった数字の1ですがこれは|と誤検知したケースが多かったです。これも1に編集し直すなどすれば使えるようになるのではないでしょうか。

以下に各数字ごとのaccuracyを残します。使用したデータの総数は、624個の画像です。

number: 0 layout: 13 matchs: 69 / 77 accuracy: 0.896
number: 1 layout: 13 matchs: 14 / 45 accuracy: 0.311  (|と誤検知する)
number: 2 layout: 13 matchs: 72 / 95 accuracy: 0.758
number: 3 layout: 13 matchs: 65 / 66 accuracy: 0.985
number: 4 layout: 13 matchs: 65 / 78 accuracy: 0.833
number: 5 layout: 13 matchs: 74 / 82 accuracy: 0.902
number: 6 layout: 13 matchs: 37 / 42 accuracy: 0.881
number: 7 layout: 13 matchs: 32 / 44 accuracy: 0.727
number: 8 layout: 13 matchs: 56 / 56 accuracy: 1.000
number: 9 layout: 13 matchs: 10 / 39 accuracy: 0.256  (g、b、bs、9g、gg等と誤検知し、精度がかなり低くなっている)

layout13の次に精度が良かったのは、8であり、6、7と続きます。