Raspberry Pi OS上のPython3でOpenCVを使うための手順です。
Raspberry Pi Operating system imagesより2022-01-28-raspios-bullseye-arm64をインストールした直後の状態で確認。
apt-getコマンドで下記のパッケージをインストールする。
sudo apt-get install python3-opencv python3-pil python3-pil.imagetk
QRコードを読み取りたい場合、pip3を使い下記のモジュールをインストールする。
sudo pip3 install pyzbar
毎回python3-pil.imagetkのことを忘れてしまうので備忘録。
『PDFをページごとに画像変換(PNG形式)するツール』にGUIをつけてみました。
基本的な操作はコマンド版と同じで、変換元PDF、変換後の画像ファイル保存先、DPI(解像度)を指定し実行ボタンを押すと処理が始まります。画像ファイルに変換後、指定フォルダの内容をGUIアプリケーションの画面下部に一覧表示します。
※2022/02/03 複数の画像形式(PNG/BMP/JPEG/GIF/TIFF)に対応しました。
ウインドウにPDFをドラッグアンドドロップすることで変換元PDFファイルの指定を行えるようにしました。
変換後画像ファイル保存先のフォルダを省略した場合、デスクトップにPDFファイル名+タイムスタンプのフォルダを作成し保存するようにしました。
※2022/02/05 Microsoft OCRを使ったPDFのテキスト化機能を追加しました。
指定されたPDFをページごとに分解、指定解像度の画像ファイル(PNGファイル)に変換したのち、指定ディレクトリに保存するWindows用プログラムを作成したので公開します。
ひとつのPDFから下図のように複数のPNG形式の画像ファイルに変換することができます。
※2022/02/03 14:00 GUI対応版を公開しました。
では、本当にそのまま画像化されているのか変換元のPDFをAcrobat Readerで確認してみます。
Acrobat Readerで変換元のPDFを表示したときは下図のように表示されます。
改ページがずれて次ページに少しだけはみ出てしまったパターンもそのまま画像化されていることが確認できます。
プログラムの流れとしては、以前記事にした『Microsoft OCRを用いてPDFからテキストを抽出する』とほぼ同じで、OCRエンジンに流していた画像を解像度指定でPNG形式に変換できるようにしました。
前回『M5Stackを使い非常に安価なクラウド連携(kintone)タイムレコーダーを作る』では、M5Stackを使ってタイムレコーダーを作ってみましたが、今回はRaspberry PiとICカードリーダ、kintoneを使ってクラウド連携のタイムレコーダーが作れるか実験してみました。
Raspberry Piの場合、USB機器やHATを介してGROVE規格のセンサーやディスプレイ、制御装置などと連携し複雑な処理を行うことができるようになります。
指定されたディレクトリ以下にある画像ファイル(JPEG形式/PNG形式)とテキストファイルをInstagramにアップロードするプログラムを作成したので公開します。
最近、Facebookクリエイタースタジオの不具合で予約投稿が行えなくなっているという事象が起きているのを知り、なにか対策ができないかと調べている中でInstagramApiSharpという.NET環境向けのInstagram APIのラッパーを見つけ、これを使った応用プログラムとして作成しました。
プログラムの起動時に設定ファイル(INIファイル)を指定することで複数のInstagramアカウントの管理を行うことができます。また、Windowsのタスクスケジューラなどと組み合わせることで、指定日時になったら自動的に投稿するといった使い方もできます。
予約投稿を行わなければならないがクリエイタースタジオが機能しない、リアルタイムで人力投稿をするのも難しいといった状況で代替手段として使える可能性があります。
※2022/01/24 15:00 Windows タスクスケジューラを使った予約投稿の設定方法を追記
※2022/01/26 03:30 PNGファイルに対応。
指定フォルダにPNGファイルを発見した場合、自動的にJPEGファイルへ変換しアップロードするように実装。(PNGファイルをそのままアップロードすると失敗するため)
前回作成した『M5Stack/ATOMとGPSユニットを使って位置情報をクラウドに保存する / M5シリーズUIFlowからKintoneに直接データをアップロードする』を応用し、M5Stack/ATOMシリーズと心拍センサユニットの組み合わせで酸素飽和度(SpO2)と心拍数を計測し、計測した情報をサイボウズ社のkintoneに直接アップロードするプログラムを作成しました。
M5Stackにプログラムを転送する際、デバイスごとにユニークなIDを設定することでkintone側では複数のM5シリーズデバイスからアップロードされた計測データを一元管理することができます。
kintone側ではデバイスからアップロードされた酸素飽和度や最終計測日時などから計測対象者の状態を把握し業務支援を行うことができるようになると考えています。
M5Stack/ATOMシリーズとGPSユニットを組み合わせてGPSトラッキングをする仕組みができないか調査をしている中で、計測した位置情報をサイボウズ社のkintoneに直接アップロードするところまでできたのでソースコードを公開します。
通信ユニットとIoT回線を使いスタンドアロンでも動きGPSロガーを「M5Stack+GPSユニット+通信ユニット+IoT回線でGPSロガーを作る」
で公開しました。
大きな画像を表示( http://www.ria-lab.com/omiyage/gps_cybozu_20220120.png )
from m5stack import * from m5ui import * from uiflow import * import wifiCfg import time import ntptime import urequests import json import unit gps0 = unit.get(unit.GPS, unit.PORTA) API_URL = 'https://<YOUR_SUBDOMAIN>.cybozu.com/k/v1/record.json' API_TOKEN = '<YOUR_TOKEN>' APP_ID = '<YOUR_APP_ID>' time = None longitude = None latitude = None data = None # Wi-Fi接続 wifiCfg.autoConnect(lcdShow=True) wifiCfg.reconnect() # Wi-Fi接続に成功するまで待機 while not (wifiCfg.wlan_sta.isconnected()): wait_ms(500) print('retry') # NTPで時刻合わせ/タイムゾーン設定 ntp = ntptime.client(host='ntp.nict.jp', timezone=9) gps0.set_time_zone(9) # メインループ while True: # GPSモジュールからデータを取得 time = gps0.gps_time longitude = gps0.longitude latitude = gps0.latitude # 取得したデータをKintone向けの形式に整える data = {'app':APP_ID,'record':({'gpstime':({'value':str(time)}),'latitude':({'value':str(latitude)}),'longitude':({'value':str(longitude)})})} try: # APIトークンとJSONデータを送信 req = urequests.request(method='POST', url=API_URL,json=json.dumps(data), headers={'X-Cybozu-API-Token':API_TOKEN,'Content-Type':'application/json'}) except: print(str('error')) wait(10) wait_ms(2)
コピー機などでPDF化された紙文書からテキストデータを抽出するため、PDFからテキストを抽出するライブラリを作成しました。
『Windows 10に搭載されているMicrosoft OCRを使って文字認識する』で作成した画像からテキストを抽出するプログラムの応用になります。
PDF文書をいったん画像として展開したものに対しOCRをかけているため100%正確なテキストは抽出できませんが、取り込んだ文書の画像状態がよければ高品質のテキストを抽出することができます。
※2022/02/05 『GUI対応したPDFをページごとに画像変換(PNG/BMP/JPEG/GIF/TIFF形式)するツール [WPF]』で応用アプリケーションを掲載しました。