iOSデバイスの充電の観察を簡単にしたい

iOS デバイスの充電時の電圧電流状況を観察したいと考えているのですが、できる限り人手をかけたくありません。

そこで何か良い方法はないでしょうか。

現状、私が保有する機器は、

A. 100V のコンセントに接続するワットチェッカー(電圧電流が表示可能)

B. USB A 端子に接続するタイプのチェッカー

C. USB Type-C に接続するタイプのチェッカー

です。

iOS デバイスはiPhone, iPad Pro, など何種類かあります。


3 種類のチェッカーがありますが今、考えつくのは充電時に各チェッカー(同時に3 台使うわけではありません。)をiPhone などで動画撮影して、その動画をFinal Cut Pro X などで10fps などに変換、返還後、シーケンシャルファイルで書き出し、そのファイルから特定の間隔でファイルを抜き出す。

その後、そのファイルをグレー画像に加工してチェッカーの文字を、OCR でテキストとして読み込む。

というような手順を思いつきます。

ところが実際に試すとOCR で処理や、シーケンシャルファイルから等間隔でファイルを抜き出すなどの操作で、つまずきます。ファイルの抜き出しは恐らくスクリプトを組むと、できる人には極めて容易にできると思いますが、どうにもスクリプト系が苦手な私だけでは手が出ません。

また大量の画像ファイルから文字を抜き出すOCR もどのアプリケーションが、予算も含め最適なのか判断が付きません。


ということで、もっと良い方法などはないでしょうか。


なお、データロガー系の機器があれば苦労もないかと思ったのですが、機器が存在するのか?と、更に問題なのが上司に持ちかけたのですが、社から予算は取れないとの事で現有保有機器でなんとかできないものかと思っております。

投稿日 2019/06/14 06:59

返信
返信: 59

2019/11/14 06:58 ni_ki への返信

今回、新たなデータを動画から解析しました。それなりにノウハウがたまり、前より早くなっておりますが、やはり気軽にできる状況ではありません。

動画の加工は手動で良いかと思いますが、その先の動画からのフレーム画像の書き出し、それをOCR でテキストに変換、更にゴミ取り。

これを自動化するにはプログラムが書ける位の能力が無いと無理そうです。

つまり私には無理です^^;


以前も書いた気がしますが、

具体的な話しで言いますと、画像からOCR でテキストデータに変換するわけですが、この画像数は3 時間で5000 枚位有ります。Tesseract はMac Pro 2013 6 コアの1/5 程度しか使いません。逆に言えば5 プロセスを同時に走らせれば最低でも4 倍の速度で処理できます。ところがこれを手動で行うと案外、開始まで時間がかかります。

更に具体的に言いますと、あるフォルダに6000 枚のPNG 画像があり、それをOCR にかけるには下記のようになります。

tesseract -l [] OCR.txt outputt

「」 の中は自前の学習データが入ります。OCR.txt は各PNG 画像のファイルパスが入ります。「outputt」は出力されるテキストファイルです。名前は任意。

それでOCR.txt 内のファイルパスの羅列を、例えば6000 枚なら1200 枚で5 つに分割できます。これが自動でできれば、時間の短縮が図れます。

2019/12/05 05:21 ni_ki への返信

Mac でも下記で学習データが作成できました。

macOS でFontからの学習です。


以下、作業。

Font をインストールしておくこと。/Library/Font

training_bs.txtをtessフォルダに置く。

/Users/Apple/tess フォルダが作業フォルダです。

イタレーション数は5000 だと本来は足りないのではないかと思いますが、今回のように認識する文字が極めて限られる場合は、問題ない可能性もあります。確認に多大な時間が必要なので試せておりません。


sudo update_dyld_shared_cache


text2image --list_available_fonts --fonts_dir=/Library/Fonts


mkdir ~/tess && cd ~/tess


combine_tessdata -e $TESSDATA_PREFIX/eng.traineddata ~/tess/eng_best.lstm


nohup time bash ~/tesseract/src/training/tesstrain.sh \

--fonts_dir /Library/Fonts \

--lang eng \

--fontlist "フォント名" "フォント名" \

--linedata_only \

--training_text ~/tess/training_bs.txt \

--langdata_dir ~/tess/langdata \

--noextract_font_properties \

--output_dir ~/tess/training_bs \

> ~/tess/training_bs/generate.log 2>&1 &


mkdir ~/tess/macFont


nohup time lstmtraining \

--model_output ~/tess/macFont/5000 \

--continue_from ~/tess/eng_best.lstm \

--old_traineddata $TESSDATA_PREFIX/eng.traineddata \

--traineddata ~/tess/training_bs/eng/eng.traineddata \

--train_listfile ~/tess/training_bs/eng.training_files.txt \

--max_iterations 5000 \

>> ~/tess/macFont/train.log 2>&1 &


tail -f ~/tess/macFont/train.log


lstmtraining \

--stop_training \

--continue_from ~/tess/macFont/5000_checkpoint \

--traineddata ~/tess/training_bs/eng/eng.traineddata \

--model_output ~/tess/macFont.traineddata

2019/07/06 22:33 ni_ki への返信

実用にはまだ程遠いですが、液晶の動画から部分切り出しした画像から、初めてOCR でフォントへの変換に成功しました、

ただ、バックライト無しの液晶の画像です。自ら発行するタイプで背景が黒い方は撮影時に工夫しないと認識が難しいです。

また学習のさせ方がMac ではフォウやるのか解っていません。Tesseract4.x だと方法が変わっているようです。

今回は学習データを、インストール時のものから、新たにダウンロードしたものに差し替えたら認識できるようになりました。英語なら学習データの追加ダウンロードは不要だと思い込んでおりました。

2019/07/30 08:16 ni_ki への返信

OCR にかけて書き出されたデータからゴミ取りをしていて、分かりました。Excel に読み込むと不明な改行が入ったり6 桁の数値のはずが1 桁や2 桁で読み込まれるます。

元のデータを確認すると静止画書き出し時にコマが混ざったような画像になっています。書き出しからゴミ取りではなく、一度OCR にかけたデータから元画像の異常を見つけて排除し、再度OCR の方が時系列データとしては健全にできるようです。

2019/09/23 04:53 ni_ki への返信

ようやく検証が終了しました。

画面共有とssh でログインしてリモートの環境でUbuntu を操作していたのですが、それが検証に手間取った理由でした。同じコマンドを実行しているはずなのに、エラーが出るときと出ないときがあったためでしたが、原因は画面共有でクリップボードの内容が送られるとコマンドが改変されることのようです。どこが改変されているのかは判明しておりません。

今回、参考にさせて頂いたのは下記。

https://qiita.com/aki_abekawa/items/418e069038fbdb77c59e

https://qiita.com/aki_abekawa/items/c2b94187f2ba7dc56993


学習の方針は、

a. フォントから学習

b. フォントから学習したtraineddata に更に画像から学習


「a. フォントから学習」ではネットからOCR を実施したい文字に似たフォントを探してきて下さい。今回は「1」と「7」がくせ者でした。「1」はただの縦棒、「7」は折れているのが1 回だけで、なかなか見つかりませんでした。


実行環境は下記。

Ubuntu18.04.3

macOS 上で仮想環境。CPU4 コア、メモリ8GB 、ディスクスペース60GB をまり当てました。メモリは4GB 、ディスクスペース30GB でも行けそうです。

tesseract 4.1.0

leptonica-1.78.0

Ubuntu は日本語版で無い方です。日本語版だとpython3 を動かすときにprint 分に.encode を付加する必要があるようです。


下記が実行したコマンドです。恐らく不要な物もあります。また参考にしたホームページとは多少違います。

sudo apt install ssh

systemctl start sshd

sudo apt install git

sudo apt install python3


sudo apt update && apt upgrade


sudo add-apt-repository ppa:alex-p/tesseract-ocr -y && apt update

sudo apt install -y tesseract-ocr

mkdir ~/tess && cd ~/tess

git clone --depth 1 https://github.com/tesseract-ocr/tesseract.git

git clone --depth 1 https://github.com/tesseract-ocr/langdata.git


echo "export TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata/" >> ~/.profile && source ~/.profile


sudo wget https://github.com/tesseract-ocr/tessdata_best/raw/master/eng.traineddata -O $TESSDATA_PREFIX/eng_best.traineddata

sudo wget https://github.com/tesseract-ocr/tessdata/raw/master/jpn.traineddata -P $TESSDATA_PREFIX

sudo wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn.traineddata -O $TESSDATA_PREFIX/jpn_best.traineddata

sudo wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn_vert.traineddata -P $TESSDATA_PREFIX


以上が環境の準備です。

combine_tessdata -e $TESSDATA_PREFIX/eng_best.traineddata ~/tess/eng_best.lstm


/usr/share/fonts にフォントを置くこと。


text2image --list_available_fonts --fonts_dir /usr/share/fonts


python3 /home/apple/tess/create_code_list.py

上記でchars.txt と言うのが作成されます。作成後、今回は0 から9 以外は不要なので削除します。


python3 create_training_text.py

上記で、training_bs.txt と言うのが作成されますが、数字のみなのでExcel で乱数で作成しました。1 行40 文字、9880 行で作成しました。normalize_text.py は使いませんでした。

mkdir ~/tess/training_bs/


nohup time bash ~/tess/tesseract/src/training/tesstrain.sh \

--fonts_dir /usr/share/fonts \

--lang eng \

--fontlist "フォント名" "フォント名" \

--linedata_only \

--training_text ~/tess/training_bs.txt \

--langdata_dir ~/tess/langdata \

--noextract_font_properties \

--output_dir ~/tess/training_bs \

> ~/tess/training_bs/generate.log 2>&1 &


tail -f ~/tess/training_bs/generate.log

で動作を確認できます。


mkdir ~/tess/deg

「deg」は半角英数なら何でも良いようです。

nohup time lstmtraining \

--model_output ~/tess/deg/40000 \

--continue_from ~/tess/eng_best.lstm \

--old_traineddata $TESSDATA_PREFIX/eng_best.traineddata \

--traineddata ~/tess/training_bs/eng/eng.traineddata \

--train_listfile ~/tess/training_bs/jpn.training_files.txt \

--max_iterations 40000 \

>> ~/tess/deg/train.log 2>&1 &


イタレーションの回数は4 万回にしました。

動作確認は下記。

tail -f ~/tess/deg/train.log


lstmtraining --stop_training --continue_from ~/tess/deg/40000_checkpoint --traineddata '/home/apple/tess/training_bs/eng/eng.traineddata' --model_output ~/tess/degf.traineddata

これでdegf.traineddata ファイルが作成されるはずです。

ここまでが「a. フォントから学習」です。

2019/09/23 05:43 ni_ki への返信

使い方も記載しておきます。学習は今のところUbuntu ですが、OCR はmacOS でできます。また、今回作成したtraineddata は完全ではありません。読み取った後、Excel などでゴミ取りが必要です。試すと、下記がよいようです。今回、11778 枚の画像を読みましたが、二つに分けて同時にOCR に掛けると早く終わります。CPU のコア数に余裕があるときですが。

tesseract --psm 6 --dpi 300 -l degfp [画像のリストがいるtxt] [出力先]

下記が実際のUSB チェッカーの画像です。

読めないのが下記です。

動画でUSB チェッカーを撮影しているので、前後の画面が混ざった物のようです。

ちなみに、下記は読めます。

これが読めるというのは、びっくりです。


一部書込を訂正します。「1」はただの棒ではありませんでした。勘違いしておりました。申し訳ありません。

2019/10/14 06:56 ni_ki への返信

以前にも記載した通り実際にOCR にかけたい画像ですが、今はFinal Cut Pro X などを使用して最終的にtiff などに書き出しております。

録画時には30fps ですが、これを0.5fps に変換するのです、その際にフレーム間で画像が混ざるものが出てきます。発生率は20/6000 程度ですが、ごみ取りが煩雑になるので今後、どうやってこの混ざりをなくすかが課題です。

物量作戦なら、30fps すべてを静止画に書き出して30 枚おきにコマンドで抽出してしまう手が思いつきます。しかしこの方法はストレージの使用量が気になります。0.5fps の60 倍なので。

またOCR 側のトレイイニングデータの問題で特定の文字列を必ず誤認することが分かりました。例えば1.51 です。すべて1151 になっていました。

ここら辺は学習用の画像データに工夫が必要なようです。もっとも本物の観察画像で再学習すれば良いのでしょうが。

2019/10/25 07:39 ni_ki への返信

ni_ki による書き込み:

測定間隔は1 秒ですから、変更されない時間がクリアランスを見ても0.5 秒もある訳です。そこを突いて抽出に挑むことにいたします。

目論見が甘かったかもです。

観測動画からチェッカーの変化の始まりを観測して1 時間分も並べれば変化の始まるフレームがどのような倍数で並んでいるか傾向がつかめると思っておりましたが、もの凄い音痴なようです。

要はチェッカーが1 秒に一回書換が起こり、カメラが30fps で撮影を続けていれば、30 の倍数で静止画にすればチェッカーの書換とは消灯しないはずですが、実施にはチャッカーの1 秒とカメラの1 秒は合っていません。合っていない状況でもカメラの30fps に対して0.975 倍とかで比率がでれば、その比率でフレームを読み出せばよいと思っておりました。ところが15 分程度を解析したところ、比率にまったく統計的な数値がでてきません。

解析前は例えば「0.950 から0.982 の間」みたいな数値が出ると思っていたのですが、実際には「1.250 から0.975」みたいな感じになり幅が広すぎます。

もっともこの手の統計的な手法に詳しい方なら簡単に数値が出せるのかもですが。


余談ですが、前からiPhone などの動画はどの程度、単位時間あたりのフレームのズレがあるのか興味があるのですが計測の方法を思いつきません。ネットでチラリと見ると何世代か前の時間の定義(なんかの波長の倍数がどうとか。)から観測できる様な気がしますが、さすがに手が出ないです。

2019/06/20 22:31 ni_ki への返信

OCR はフリーでターミナルから使用できるものもあるようなので、そこら辺を探ったみることにします。

動画からコマを抜き取る方は、そもそも監視系のカメラならfps を少なくして撮影が可能な事もわかりました。ただ下手にカメラなど購入するなら、その予算をロガーに回せば良いという話になるので、よく検討する必要があります。

2019/06/25 06:36 ni_ki への返信

電子工作キットを利用して、電圧・電流の変化をsdカードにでも記録するとか、シリアル通信でパソコンに送るとかすればocrは不要です。

USB Safety Tester ( 電圧 電流 チェッカー ) をレビューしてみました | mgo ...


注意:聞かれても何もわからない無責任な書き込みです。


2019/06/25 05:45 ni_ki への返信

iPad Pro 9.7-inch, Wi-Fi, 1st, iOS12.3.1

バッテリー容量80 から85 パーセントで、各充電アダプタで下記でした。

12W アダプタ 6 - 7W 程度

30W アダプタ 9 - 10W 程度


80 パーセント超えれば12W も30W アダプタでも充電速度は同じくらいと予想していたのでですが、予想外でした。やはり観測してみないと不明点が多いです。12W アダプタが10W で充電できないはずはないのですが。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

iOSデバイスの充電の観察を簡単にしたい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。