PowerShell 7.x で、QRコード* の Decode をしたい
背景
先日、QRコードを書く機会があったのですが、 ふと"QRコードのテストってどうすれば?"なんて思いました。
1つなら、スマホで読み込んで確認、で完了ですが、 これが、100を超えるとちょっと大変です。
いろいろ調べてみると、Python, OpenCVでQRコードを検出・読み取り なんて記事もあります。
OpenCV なら、OpenCV wrapper for .NET なんてのもあり、 じゃあ、PowerShell からでもできるんじゃね?
という背景です。
やりたいこと
PowerShell 7.x と OpenCvSharp とで、QRコードの Decode をしたい。
以下、目次
できたこと
できました。コードはこんな感じ。
param (
[Parameter(Mandatory = $true)]
[string]$QRCodePath
)
# DLLのパス(カレントディレクトリにある場合)
$openCvSharpDllPath = ".\OpenCvSharp.dll"
$code = @"
public static class Decoder
{
public static string DecodeQRCode(string imagePath)
{
try
{
using var src = OpenCvSharp.Cv2.ImRead(imagePath);
if (src.Empty())
{
return "not decoded";
}
var qrDecoder = new OpenCvSharp.QRCodeDetector();
string decodedText = qrDecoder.DetectAndDecode(src, out OpenCvSharp.Point2f[] points);
return string.IsNullOrEmpty(decodedText) ? "not decoded" : decodedText;
}
catch (System.Exception)
{
return "not decoded";
}
}
}
"@
Add-Type -Path $openCvSharpDllPath
Add-Type -WarningAction Ignore -IgnoreWarnings -TypeDefinition $code -Language CSharp -ReferencedAssemblies $openCvSharpDllPath
function Decode-QRCode {
param([string]$ImagePath)
return [Decoder]::DecodeQRCode($ImagePath)
}
$result = Decode-QRCode -ImagePath $QRCodePath
Write-Host "Decoded Text: $result"
たとえば、こんなQRコード

を用意して、使い方はこう
>pwsh .\Decode-QRcode.ps1 -QRCodePath .\qrcode-web-noren.png Decoded Text: https://web-noren.com/norens/show/sample-noren-url
やってみて
PowerShell から、C# のコードは読み込めるというのは知っていたので、 すぐにできるかな、と思っていたら、いろいろつまずきポイントがありました。
Nuget で OpenCvSharp を Install したけど、どうするんだっけ?
Release 4.11.0.20250507 の README に、
OpenCvSharp core libraries: OpenCvSharp.dll と Native binding: OpenCvSharpExtern.dll が必要です。
みたいな記述に読めたので、ps1 ファイルと同じ場所に置きました。
Add-Type で Warning でてますけど、、、
うーん、Warning 消したらいけるかな?
Need help resolving error CS1701 in PowerShell
よし、いける!!
(もしかしたら、OpenCvSharp Build Instructions で build しなおしたらかもだけど。。。よし!)
Chrome から QRコード作成すると、Decoded Text: not decoded なんですけど
真ん中に恐竜がでてくるこんなやつ。

これは、この記事を書いているときにやってみて気づきました。
OpenCV 側のあれかな?
いろいろ仕組み等把握したくて、参考情報を見てみましたが、、、?
今度、時間があるときにじっくり。
Powershell 7.x だけじゃなく、Powershell 5.x (標準で Windows 11 に入っているやつ)でもいけるんじゃ?
いけませんでした。
お知らせ
本記事で利用した https://web-noren.com/norens/show/sample-noren-url は、
スマホやパソコンから、 お店が、「開いている/しまっている」や「空いている/混んでいる」を、 リアルタイムにお知らせするための、サービスです。
これがあればお客さんの、
店の前まで行って「あ、お店混んでたんだ!じゃ、やめとこ」
がなくなります!!
お客さんは、QRコードや LINE でお店から送られた URL にアクセスするだけ!
無料利用もできますので、ぜひお試しください!
→ Web のれん
参考にしたところ
- Python, OpenCVでQRコードを検出・読み取り
- OpenCV wrapper for .NET
- OpenCV wrapper for .NET Release 4.11.0.20250507
- Need help resolving error CS1701 in PowerShell
- Qiita: QRコード検出APIの解説
- Qiita: QRコードの検出のAPIを振り返る(2回目)
以上でした。