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を調べてる時、参考に挙げられていたのが有ったので参照 してみた。

nayuki/QR-Code-generator

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

芋蔓式に情報が出てくるなあ。

Project Nayuki

トロント在住のnayukiさん。自らを、こんにちは!カナダのトロントで魔法少 女ソフトウェア開発をしている名雪です。と名乗っている。 これも宝の山ですよ。

QRcode by go

上記のメニメニさんにgoバージョンが無い && OpenBSDにgo君が鎮座してたので、かまってあげる。

Go で QR コード生成を自作する good info

QRコードをつくってみる 参考資料 こちらも良記事!

go-qrcode

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コードをデコードしたいときの選択肢

強力な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を使う方法が有るみたいだ。

【Python】OpenCVでQRコードを読み取る

(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をやってた時に、調べきれていないと言うか、消化不良を起していたので。 何かレーダー方面が出てきた。

コスタス配列とはどんなものか

レーダの中身について(初級)

レーダの中身について実践編~距離、速度測定

行列

ベクトル・行列が日常生活で利用される例、応用

数理女子 疲れたら癒しにいいかも。

竹取工学物語

なんていう本を読んだ。

竹を土木・建築学的に見たら、どんな知見が得られるかってのを易しく解説し てる。

竹を割ったような性格とか言うけど、縦に割りやすい。一方、切ろうとすると 非常に固くて難儀する。

割った時に、抵抗するのは、要所々にある、節。この節の間隔が高さによって 誓うそうな。建築の材料を最小にして、効果を最大にする秘密が隠れているそ うな。それから、水分・養分を送る管は、表面近くで密になってるそうだ。 これも工学的には理にかなっているそうだ。

こういう自然界の知恵を集めて、建築とか工学とか医学に役立てましょってサ イトが公開されてる。

askNature

身近な例だと、鮫肌の水着。スピードが出すぎて禁止になったね。最新の新幹 線の鼻づらが、やけに長い。空中から水につっこみ魚を取る鳥のくちばしを真 似たそうだ。水しぶきが最小に抑えられる構造。トンネルに突入する時の衝撃 波の低減に効果があるそうだ。蓮の葉の水濡れ性が極めて小さく水玉になるの をヒントに汚れない壁とか。。。

今NHK+で、サイエンスZeroを見てるんだけど、線虫の驚異ってのをやってる。 虫と侮るなかれ、無視できない存在だぞ。

自然は偉大だ。


This year's Index

Home