Other QRcode
Table of Contents
OpenBSD 7.4 release
The current release is OpenBSD 7.4, released October 16, 2023. This is the 55th release.
今回も無事にリリースされた。これで55回目とは、息が長いな。そろそろ、や るかな。
sysupgrade sysmerge pkg_add -u ; /usr/src /usr/ports の入れ替え find . -type d -name CVS -exec rm -rf {} +
ソースの入れ替えに、一番時間を喰うな。
日常のオペレーションで一つ変化した事が有る。オペレータ・グループでは、 shutdown出来なくなった事。
vbox$ ls -l /sbin/shutdown -r-sr-x--- 1 root _shutdown 259652 Oct 10 23:41 /sbin/shutdown*
こんな風に、権限が別グループ扱かいになってた。
many lang version
前回からの続き。 haskellバージョンのqrcode-coreを調べてる時、参考に挙げられていたのが有ったので参照 してみた。
c/ java/ python/ rust/ typescript-javascript/ cpp/ java-fast/ Readme.markdown rust-no-heap/
色々な言語での記述が公開されてた。下記はpython版の例
██████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████████████████████████ ████████ ████████ ██ ██ ████████ ████████ ██████████ ████ ██ ████ ██ ██████████ ████████ ████████ ██ ██ ██ ██ ██ ██████ ██ ██ ████████ ████████ ██ ██ ████ ████████ ██████ ██ ██ ████████ ████████ ██ ██ ████ ██████ ████ ██ ██ ████████ ████████ ██████████ ██████ ██████ ██ ██████████ ████████ ████████ ██ ██ ██ ██ ██ ██ ████████ ████████████████████████ ██████ ██████████████████████████ ████████ ██ ████ ████ ██████ ████████████ ████████████ ████████ ██████ ████ ██████████ ████████ ████████ ██ ████ ██ ██████ ██ ██ ██ ██ ████████ ████████ ████ ██████ ████ ██████████ ████████ ██ ██ ██ ██████ ████ ██ ████████ ██████████ ██ ██ ██ ██████ ████ ████ ████████ ████████ ██ ██████ ██ ██ ████ ██ ████ ████████ ██████████ ██ ██████ ██ ██ ██████████ ████ ██████████ ████████ ██ ██ ██ ██ ████ ██████████████ ████████████████████████ ████ ██ ██████ ██ ████████ ████████ ██ ██ ██ ████ ██ ██ ██ ████████ ████████ ██████████ ██ ██ ██ ██████ ██ ████████ ████████ ██ ██ ██ ████ ████ ██ ██████████ ████████ ██ ██ ████ ██████ ██ ████ ████████████ ████████ ██ ██ ██ ██████ ██ ██████ ██████ ████████ ████████ ██████████ ██ ████ ██ ████ ██████ ██ ██████████ ████████ ██ ████ ██ ██████ ████████ ██████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████████████████████████
こちらは、C言語版で、 Error correction level = LOW 7%までの破損を修復。さすがに、このQRcode だと、スマホでは認識しない。まあ、そうだわな。1ドットを@@で表示して、 画面上では正方形に見えるようにしてるからね。一応、伝文は、Hello QRcode です。
vbox$ gmake mkdir -p .deps touch .deps/timestamp cc -std=c99 -O -c -o qrcodegen.o -MMD -MF .deps/qrcodegen.d qrcodegen.c ar -crs libqrcodegen.a -- qrcodegen.o cc -std=c99 -O -c -o qrcodegen-demo.o -MMD -MF .deps/qrcodegen-demo.d qrcodegen-demo.c cc -std=c99 -O -o qrcodegen-demo qrcodegen-demo.o -L . -l qrcodegen cc -std=c99 -O -DQRCODEGEN_TEST -o qrcodegen-test qrcodegen-test.c qrcodegen.c qrcodegen-test.c(/tmp/qrcodegen-test-52210b.o:(testAddEccAndInterleave)): warning: rand() may return deterministic values, is that what you want?
@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@ @@ @@ @@@@@@ @@ @@ @@ @@@@@@ @@ @@ @@ @@@@@@ @@ @@ @@@@@@ @@ @@ @@@@@@ @@ @@@@@@ @@ @@ @@@@@@ @@ @@ @@@@@@ @@ @@@@@@ @@ @@ @@ @@@@ @@ @@ @@ @@@@@@@@@@@@@@ @@ @@ @@ @@@@@@@@@@@@@@ @@ @@ @@ @@@@@@@@@@ @@@@@@@@@@@@ @@ @@ @@@@@@ @@ @@@@ @@@@@@@@ @@@@@@ @@ @@ @@@@@@ @@@@ @@ @@ @@ @@ @@@@ @@ @@ @@@@@@@@@@@@ @@ @@@@@@ @@ @@ @@ @@ @@@@@@ @@@@@@@@ @@ @@@@ @@@@@@@@@@@@@@ @@ @@@@ @@@@ @@@@ @@ @@ @@ @@ @@ @@@@ @@ @@@@@@ @@ @@@@ @@@@@@ @@ @@@@@@ @@ @@ @@@@ @@@@ @@ @@@@@@ @@ @@ @@@@@@@@@@ @@ @@ @@@@@@ @@ @@@@@@@@@@@@@@ @@@@ @@@@@@ @@@@ @@
Error correction level = HIGH 30%の破損を修復
@@@@@@@@@@@@@@ @@ @@@@ @@ @@ @@@@@@@@@@@@@@ @@ @@ @@@@ @@ @@ @@ @@ @@ @@@@@@ @@ @@ @@ @@ @@ @@@@@@ @@ @@ @@@@@@ @@ @@ @@ @@@@@@ @@ @@@@@@ @@ @@ @@@@@@ @@ @@@@@@ @@@@@@ @@ @@@@@@ @@ @@ @@ @@ @@ @@@@ @@ @@ @@@@@@@@@@@@@@ @@ @@ @@ @@ @@ @@@@@@@@@@@@@@ @@@@@@@@ @@ @@@@ @@@@@@ @@ @@ @@@@ @@@@@@ @@@@@@ @@ @@ @@@@ @@ @@ @@ @@ @@ @@@@@@ @@@@@@ @@ @@ @@ @@@@@@ @@@@ @@ @@ @@ @@@@@@ @@@@ @@@@ @@@@ @@@@@@@@ @@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@@@ @@@@@@ @@ @@@@@@@@@@@@ @@@@ @@@@ @@ @@ @@ @@@@ @@ @@ @@ @@ @@ @@@@ @@ @@@@@@ @@@@@@@@@@@@@@@@ @@ @@ @@@@ @@@@ @@ @@ @@ @@@@@@@@@@@@@@ @@@@ @@ @@@@ @@ @@ @@@@@@ @@ @@ @@@@ @@@@ @@ @@@@ @@ @@ @@@@@@ @@ @@ @@ @@ @@@@@@@@@@@@@@@@ @@ @@@@@@ @@ @@@@@@ @@ @@@@@@@@@@ @@ @@ @@ @@@@@@ @@ @@@@ @@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@@@@ @@ @@@@@@@@@@@@@@ @@ @@@@ @@@@ @@@@ @@@@
qrcodegen.h を読むのが礼儀ってもんです。
作者さんのHP
芋蔓式に情報が出てくるなあ。
トロント在住のnayukiさん。自らを、こんにちは!カナダのトロントで魔法少 女ソフトウェア開発をしている名雪です。と名乗っている。 これも宝の山ですよ。
QRcode by go
上記のメニメニさんにgoバージョンが無い && OpenBSDにgo君が鎮座してたので、かまってあげる。
Go で QR コード生成を自作する good info
QRコードをつくってみる 参考資料 こちらも良記事!
DLするにも、少々手続が必要とな。
vbox$ cd go vbox$ ls vbox$ mkdir src vbox$ cd src vbox$ ls vbox$ mkdir myqr vbox$ cd myqr/ vbox$ go mod init go: creating new go.mod: module myqr vbox$ go get -u github.com/skip2/go-qrcode/... go: downloading github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e go: added github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
して、閲覧用のコードがやってきた。
vbox$ pwd /home/sakae/go/pkg/mod/github.com/skip2/go-qrcode@v0.0.0-20200617195104-da1b6568686e vbox$ ls LICENSE go.mod regular_symbol.go README.md qrcode/ regular_symbol_test.go bitset/ qrcode.go symbol.go encoder.go qrcode_decode_test.go symbol_test.go encoder_test.go qrcode_test.go version.go example_test.go reedsolomon/ version_test.go
decode qrcode
この間、眼鏡のレンズを交換した。レンズが入っていたパッケージにQRコード が印刷されてた。どうせ何処かのWebへ飛んでいく、アレでしょと思った。 でも読んでみるかな。女房のスマホを借りて試し読み。
カメラの焦点がなかなか合わず、スマホを前後させて調整。年寄の持つスマホ は老眼モードなんだな。まあ、無料で手に入れたスマホなんで文句は言うまい。
IETEM=xxxx,SEP=YYYY,CYL=ZZZ
みたいなのが読み取れた。そして、これを検索しますか? とスマホが聞いて きた。で、一発で製品ページが出てきた。SEO対策重要って意味が良くわかり ましたよ。狭い画面でスクローロさせられるんじゃ、客に逃げられるわな。 オイラーみたいに、パソコン(の広い画面)しか相手にしない人とは訳が違うん です。妊婦さんの苦労を、腹に石をかかえて実感してもらうってのが有るそう だけど、何事も経験してならです。
スマホでの読み取りに一つ不満がある。必ずWebに誘導されちゃって、データ を外部に送出できないんだ。携帯屋が儲かるように仕様決めされてるんだな。 仮にメールと連携したって、それじゃ通信量は僅かで、鼻糞にもならないだろ う。
そんな訳なんで、スマホに頼らないでQRコードを読めないものかねぇ。
Windows PC上でQRコードをデコードしたいときの選択肢
Python, ZBarでバーコード・QRコードを検出・読み取り use OpenCV
qreader 3.12 use libzbar0 zbarって、ゼブラ頭のおじさんを連想するぞ。
libzbar0
らしいので、ソースを取りよせpythonの部を参照してみた。
========================================== zbar -- read barcodes from images or video ========================================== ZBar Bar Code Reader is an open source software suite for reading bar codes from various sources, such as video streams, image files and raw intensity sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 93, Code 39, Codabar, Interleaved 2 of 5 and QR Code. These are the Python bindings for the library. Check the ZBar project home page for the latest release, mailing lists, etc. * https://github.com/mchehab/zbar Examples -------- To scan an image, wrap the raw image data in a ``zbar.Image`` and feed it to a ``zbar.ImageScanner``:: import zbar scanner = zbar.ImageScanner() image = zbar.Image(width, height, 'Y800', raw_data) scanner.scan(image) for symbol in image: print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
イントールしてみるか。
(mypy) [sakae@deb ~]$ pip install qreader Requirement already satisfied: install in ./.local/lib/python3.11/site-packages (1.3.5) Collecting qreader Downloading qreader-3.12.tar.gz (17 kB) Preparing metadata (setup.py) ... done Requirement already satisfied: numpy in ./.local/lib/python3.11/site-packages (from qreader) (1.26.1) Collecting opencv-python Downloading opencv-python-4.8.1.78.tar.gz (92.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 92.1/92.1 MB 2.5 MB/s eta 0:00:00
えっ、更に土台が必要なのか。これは大事だな。多分失敗するだろうと思って いたら、マーフィーの法則が作用したぞ。いいかげんに32Bitマシンを捨てろ や。
いじけて、zbar/qrcode/ を探索。rs.c に mainが定義されてたので、ここを 入口にすればいいかなと思った。けど、周辺を調べたら、どうもテスト用のコー ドだな。残念。
qrdectxt.c 思わせぶりなファイル。つらつらと閲覧すると、 text_is_big5
が
出てきた。SJISは無かったぞ、そんな事で委員会?
下記が、最長な関数。
int qr_code_data_list_extract_text(const qr_code_data_list *_qrlist, zbar_image_scanner_t *iscn, zbar_image_t *img) : /*We assume at most 4 UTF-8 bytes per input byte. I believe this is true for all the encodings we actually use.*/ case QR_MODE_KANJI:has_kanji=1; case QR_MODE_BYTE:shift=2;
途中、こんなのも出てくるんで、宜しくやってくれるんでしょう。
if(utf8_cd!=(iconv_t)-1)iconv_close(utf8_cd); if(sjis_cd!=(iconv_t)-1)iconv_close(sjis_cd); if(latin1_cd!=(iconv_t)-1)iconv_close(latin1_cd); if(big5_cd!=(iconv_t)-1)iconv_close(big5_cd); free(mark); return ntext
最終部分は、こんな風になってたんで、(多分)大丈夫だろうね。
qrdec.cから上記の関数を呼出ているから、見るならこちらからだな。
_zbar_qr_decode
なんて、てっぺんぽいな。
use OpenCV
ダイレクトにopencvを使う方法が有るみたいだ。
(mypy) [sakae@arch tmp]$ pip install opencv-python (mypy) [sakae@arch tmp]$ qr --factory=png "Hello QRcode" >aa.png (mypy) [sakae@arch tmp]$ python decode.py Hello QRcode
decode.py
import cv2 image = cv2.imread("aa.png") qrDetector = cv2.QRCodeDetector() data,bbox,rectifiedImage = qrDetector.detectAndDecode(image) print(data)
opencvがどうなってるか site-packages/cv2/version.pyを確認。どうやら最 低のオプションっぽい。よう知らないけどね。
opencv_version = "4.8.1.78" contrib = False headless = False rolling = False ci_build = True
恒例のソース祭りって事で、ご本尊様に面会。
/home/sakae/src/opencv/modules/objdetect/src [sakae@deb src]$ wc qrcode* 4645 15275 176013 qrcode.cpp 1263 4313 41887 qrcode_encoder.cpp 860 2954 24062 qrcode_encoder_table.inl.hpp 6768 22542 241962 total
格調高くてビビリまくりであります。
コスタス行列
FT8をやってた時に、調べきれていないと言うか、消化不良を起していたので。 何かレーダー方面が出てきた。
数理女子 疲れたら癒しにいいかも。
竹取工学物語
なんていう本を読んだ。
竹を土木・建築学的に見たら、どんな知見が得られるかってのを易しく解説し てる。
竹を割ったような性格とか言うけど、縦に割りやすい。一方、切ろうとすると 非常に固くて難儀する。
割った時に、抵抗するのは、要所々にある、節。この節の間隔が高さによって 誓うそうな。建築の材料を最小にして、効果を最大にする秘密が隠れているそ うな。それから、水分・養分を送る管は、表面近くで密になってるそうだ。 これも工学的には理にかなっているそうだ。
こういう自然界の知恵を集めて、建築とか工学とか医学に役立てましょってサ イトが公開されてる。
身近な例だと、鮫肌の水着。スピードが出すぎて禁止になったね。最新の新幹 線の鼻づらが、やけに長い。空中から水につっこみ魚を取る鳥のくちばしを真 似たそうだ。水しぶきが最小に抑えられる構造。トンネルに突入する時の衝撃 波の低減に効果があるそうだ。蓮の葉の水濡れ性が極めて小さく水玉になるの をヒントに汚れない壁とか。。。
今NHK+で、サイエンスZeroを見てるんだけど、線虫の驚異ってのをやってる。 虫と侮るなかれ、無視できない存在だぞ。
自然は偉大だ。