パブスナック店舗前の人流・交通量調査を実施。
録画した映像をVLCで再生しヒト、クルマを数えていたがさすがに時間がかかるので、OpenCV / java環境で特徴量の変化からヒト、クルマ出現タイミングを抽出し、当該画像を確認する仕組みを構築。
撮影した店舗入り口前道路。
OpenCV java でヒトなど出現時点を特定し、画像一覧をWebブラウザで確認する。
結果:土曜日 30分間毎
クルマ通りが非常に多いことがわかりました。
多いときには、1分間に5台も店舗前を通過していることがわかりました。
クルマから見え易い看板の交換、見直しを店舗に提案しました。![]()
![]()
結果:平日午後
平日もクルマ通りが多いことがわかりました。
「未来」さんご協力ありがとうございました。![]()
![]()
![]()
■お店情報
チャイナパブ 未来
046-251-2930 〒252-0005 神奈川県座間市さがみ野2-5-17メゾンさがみ野101
よろしくお願いいたしまーーす。
#チャイナパブ未来
///////////////////////////////////
調査環境詳細:
カメラ:
ミニカメラ A9 WiFi のような商品名
数年前にaliexpressで200円くらいで購入
32GBくらい(FAT32)MicroSDメモリ
モバイルバッテリーに接続して使用
このカメラは2.4GHz WiFiに接続して使用し、携帯アプリからモニタと設定など出来る。
Setting/Recording settings/Video mode = All-day recording にしておくと1分毎のaviファイルに映像が記録・保存される。



保存される動画ファイルの諸元:
1秒10フレーム、音声付きです。
ffmpeg version c30f360955 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 10-win32 (GCC) 20220113
configuration: --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --extra-libs= --extra-ldflags='-static -static-libgcc -static-libstdc++' --extra-ldexeflags='-static -static-libgcc -static-libstdc++' --pkg-config-flags=--static --disable-autodetect --prefix=/ffmpeg-static/dist/windows/x86_64//ffmpeg --enable-version3 --pkg-config=pkg-config --enable-runtime-cpudetect --enable-pthreads --disable-w32threads --enable-libtheora --enable-libvpx --enable-libvorbis --disable-indev=sndio --disable-outdev=sndio --enable-neon --enable-libopenjpeg --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-openssl --enable-libvo-amrwbenc --enable-libopus --enable-libx264 --enable-libx265 --enable-libaom --enable-libwebp --enable-libxvid --enable-libmp3lame --enable-zlib --enable-ffprobe --enable-pic --disable-doc --enable-demuxer=dash --enable-libxml2
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
[aist#0:1/pcm_s16le @ 000001bff7e4a080] Guessed Channel Layout: mono
Input #0, avi, from '20250607\202506071604.avi':
Duration: 00:00:59.90, start: 0.000000, bitrate: 2065 kb/s
Stream #0:0: Video: mjpeg (Baseline) (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 640x480 [SAR 640:480 DAR 16:9], 1936 kb/s, 10 fps, 10 tbr, 10 tbn
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s
ffmpegで1秒10コで画像として切り出します。
ffmpeg.exe -i 202506071604.avi -r 10 202506071604_%03d.png
1分のaviファイルのサイズは15MBくらい、1時間で900MB(≒1GB)、丸一日録画しても32GBSDメモリーに納まります。
2025/06/07 16:05 15,467,100 202506071604.avi
※SDメモリー内は、上記のようなファイル名ではなく、時間毎のディレクトリに保存されているので、扱いやすいようファイル名のリネーム、異動をします。(おこのみで
OpenCV java @Windows
ネットから以下のファイルを取得
opencv-4110.jar
opencv_java4110.dll
javadoc:
java内の処理の流れ
// 特徴量抽出器
ORB orb = ORB.create();
// 比較画像
Mat mat1 = imread(fileName1);
Mat mat2 = imread(fileName2);
// 特徴量検出
orb.detect(mat1, keyPoint1);
orb.detect(mat2, keyPoint2);
// 計算
orb.compute(mat1, keyPoint1, descriptor1);
orb.compute(mat2, keyPoint2, descriptor2);
// 比較
bfMatcher.match(descriptor1, descriptor2, dmatch);
// distanceの総量も求める
for (DMatch dm : dmatch.toList()) {
distance_total += dm.distance;
}
// 画像2つを比較した結果のdistanceの総量の変化により、画像の変化を捉える
// 変化量が閾値以上の画像=ヒトなど出現として、ピックアップする
distanceの総和の変化とdistanceの総和の増分の変化
全く同じ画像、Σdistance=0となる場合があるので、その値は除外する(赤字×印)
増分の緑楕円部分を抽出したいので、閾値を設定し、それ以外の部分を除外する。
緑楕円部分の画像をWebブラウザで確認出来るように、適当なhtmlファイルを生成する。
中身:
<img src="20250607\202506071604_156.png" />
<img src="20250607\202506071604_248.png" />
・・・
<html>や<body>が無くてもブラウザでいい感じに表示してくれます。(firefox
※物体認識まで実装すれば、手動でカウント作業がなくなりますが、今回は修験時点の抽出まででした。![]()









