SIM7080G CAT-M/NB-IoT Unitを開封10分でダメにしたのでCAT-MにSIMカードを装着し通信確認プログラムを動かすまでの記録です。

20220217_024905987_iOS

Read More

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のテキスト化機能を追加しました。

Ver 1.1.1の実行例(画像変換後)

Read More

指定されたPDFをページごとに分解、指定解像度の画像ファイル(PNGファイル)に変換したのち、指定ディレクトリに保存するWindows用プログラムを作成したので公開します。
ひとつのPDFから下図のように複数のPNG形式の画像ファイルに変換することができます。
※2022/02/03 14:00 GUI対応版を公開しました

PNGファイルに変換されたPDFの例

では、本当にそのまま画像化されているのか変換元のPDFをAcrobat Readerで確認してみます。
Acrobat Readerで変換元のPDFを表示したときは下図のように表示されます。
改ページがずれて次ページに少しだけはみ出てしまったパターンもそのまま画像化されていることが確認できます。

Acrobat Readerで変換元PDFファイルを表示
プログラムの流れとしては、以前記事にした『Microsoft OCRを用いてPDFからテキストを抽出する』とほぼ同じで、OCRエンジンに流していた画像を解像度指定でPNG形式に変換できるようにしました。

Read More

前回『M5Stackを使い非常に安価なクラウド連携(kintone)タイムレコーダーを作る』では、M5Stackを使ってタイムレコーダーを作ってみましたが、今回はRaspberry PiとICカードリーダ、kintoneを使ってクラウド連携のタイムレコーダーが作れるか実験してみました。
Raspberry Piの場合、USB機器やHATを介してGROVE規格のセンサーやディスプレイ、制御装置などと連携し複雑な処理を行うことができるようになります。

20220130_170559174_iOS

Read More

M5Stackを使うと非常に安価にクラウド連携のタイムレコーダーを作成することができます。
今回は、RFIDユニットと非接触ICカードを組み合わせてカードをピッとすると打刻データがkintoneに即アップロードされる方式のタイムレコーダーを作成しました。
アップロードしたデータを使いkintone上で勤務簿作成や給与処理などの就業管理の自動化ができると思います。20220128_145421282_iOS

Read More

指定されたディレクトリ以下にある画像ファイル(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ファイルをそのままアップロードすると失敗するため)

2022-01-24

Read More

前回作成した『M5Stack/ATOMとGPSユニットを使って位置情報をクラウドに保存する / M5シリーズUIFlowからKintoneに直接データをアップロードする』を応用し、M5Stack/ATOMシリーズと心拍センサユニットの組み合わせで酸素飽和度(SpO2)と心拍数を計測し、計測した情報をサイボウズ社のkintoneに直接アップロードするプログラムを作成しました。
M5Stackにプログラムを転送する際、デバイスごとにユニークなIDを設定することでkintone側では複数のM5シリーズデバイスからアップロードされた計測データを一元管理することができます。

kintone側ではデバイスからアップロードされた酸素飽和度や最終計測日時などから計測対象者の状態を把握し業務支援を行うことができるようになると考えています。

IMG_8324

Read More

M5Stack/ATOMシリーズとGPSユニットを組み合わせてGPSトラッキングをする仕組みができないか調査をしている中で、計測した位置情報をサイボウズ社のkintoneに直接アップロードするところまでできたのでソースコードを公開します。

ATOM Matrix + GPS Unit

通信ユニットとIoT回線を使いスタンドアロンでも動きGPSロガーを「M5Stack+GPSユニット+通信ユニット+IoT回線でGPSロガーを作る
で公開しました。

使い方

  • kintone上にアプリ(データベース)を作成し、外部からアクセスするためのAPIトークンを発行、および適切なアクセス権限を設定します。
    サンプルプログラムでは、「gps」というアプリを作成し、「gpstime」「latitude」「longitude」というフィールドを文字列(1行)で定義しています。

    2022-01-20 (6)

    ※APIからアップロードする際に使用するのは、kintone上の「フィールド名」(設定画面一番上の項目)ではなく「フィールドコード」(設定画面一番下の項目)である点に注意が必要です。
    今回、ここに気づくまでが一番時間がかかりました。

2022-01-20 (5)

  • kintoneのURL、APIトークン、アプリIDをソースコードの冒頭にある変数に設定します。
  • M5Burnerなどを使ってM5Stack/ATOM.シリーズのデバイスに転送します。
  • 電源を投入すると計測したデータがkintone上にアップロードされ下図のように記録されます。
    (GPSユニットから取得した生データは100倍の数値が記録されているようです)

2022-01-20 (4)

ソースコード

2022-01-20 (3)

大きな画像を表示( 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]』で応用アプリケーションを掲載しました。

Read More