C#からすると違和感のあるPython 文法

概要文例
for の後の if 文 len([num for num in nums if num < 0])
暗黙の型変換bool(1), bool(0)
def という名前
関数の複数の戻り値
def least_difference(a, b, c):
diff1 = abs(a – b)
diff2 = abs(b – c)
diff3 = abs(a – c)
return min(diff1, diff2, diff3)
switch 文がない
else if ではなく、elif
def inspect(x):
if x == 0:
print(x, “is zero”)
elif x > 0:
print(x, “is positive”)
elif x < 0:
print(x, “is negative”)
else:
print(x, “is unlike anything I’ve ever seen…”)
標準ではconst がないPI = 3.14
トリプルクオート triplequoted_hello = “””hello
world”””
in planets = [‘Mercury’, ‘Venus’, ‘Earth’, ‘Mars’]
‘Saturn’ in planets
from import from math import *
print(pi, log(32, 2))
————-
from math import *
from numpy import *
print(pi, log(32, 2))
これは、path, numpy ともにlog が定義されているため、 TypeError: return arrays must be of ArrayType エラーとなる
dir print(dir(list))

[ WARN:0] videoio(MSMF): async ReadSample() call is failed with error status: -1

OpenCVで、突然次のエラーが出るようになった。
[ WARN:1] videoio(MSMF): can’t grab frame. Error

原因は、VideoCapture を2つのプロセスで起動していたため、あとから起動したプロセスがフレームを取得することができなかったため。

OpenCV: FFMPEG: tag 0x5634504d/’MP4V’ is not supported with codec id 12 and form
at ‘mp4 / MP4 (MPEG-4 Part 14)’
OpenCV: FFMPEG: fallback to use tag 0x7634706d/’mp4v’
[ WARN:0] videoio(MSMF): OnReadSample() is called with error status: -1072875772

[ WARN:0] videoio(MSMF): async ReadSample() call is failed with error status: -1
072875772
[ WARN:1] videoio(MSMF): can’t grab frame. Error: -1072875772
[ WARN:1] videoio(MSMF): can’t grab frame. Error: -2147483638
[ WARN:1] videoio(MSMF): can’t grab frame. Error: -2147483638
[ WARN:1] videoio(MSMF): can’t grab frame. Error: -2147483638
[ WARN:1] videoio(MSMF): can’t grab frame. Error: -2147483638

Module ‘cv2’ has no ‘VideoCapture’ memberpylint(no-member)

Visual Studio Code (Windows) で、CV2 で次の lint エラーが出る場合の解消法

Module ‘cv2’ has no ‘VideoCapture’ memberpylint(no-member)

[メニュー] →[ファイル] →[基本設定] →[設定]

設定タブが開くので、設定の検索に “lint” を入力

Python › Linting: Pylint Args
に、
–extension-pkg-whitelist=cv2
を追加して、セーブする。
似たような設定項目が多いので注意。

Download YouTube

テスト用の動画をYouTubeから調達

pip が壊れたので、修復

pip を実行すると、次のエラーが発生するようになった。原因不明。

PS C:\Users\仮面\Desktop\VideoTest> pip
Traceback (most recent call last):
File “d:\program files\python37\lib\runpy.py”, line 193, in run_module_as_main “main“, mod_spec) File “d:\program files\python37\lib\runpy.py”, line 85, in _run_code exec(code, run_globals) File “D:\Program Files\Python37\Scripts\pip.exe__main_.py”, line 5, in
ModuleNotFoundError: No module named ‘pip’

そこで、python -m ensurepip により、pip を修復

PS C:\Users\仮面\Desktop\VideoTest> python -m ensurepip
Looking in links: C:\Users\仮面\AppData\Local\Temp\tmp2qepvojk
Requirement already satisfied: setuptools in d:\program files\python37\lib\site-packages (40.8.0)
Collecting pip
Installing collected packages: pip
Successfully installed pip-19.0.3

Video の DCT, IDCT ローパス

OpenCvで、リアルタイムで、Video を200×200にスライスして、DCT→ローパス→IDCT を行ってみた。

左から、オリジナル、DCT、DCTの高周波成分をカット( 情報量はオリジナルの 1/100 )、IDCTで逆変換結果。

OpenCVで、動き検出

【爆速】OpenCVで複数の物体検出 -ラズパイ- を参考に、物体認識を試してみた。

単一オブジェクトの動き検出

KMeans を使って複数オブジェクトを認識をしてみたところ、ノイズがあると重心がうまく分離できず、Bounding Box が大きくずれてしまう。また、同一の物体であっても、複数のクラスターから構成されてしまうという問題点があった。

次に、オブジェクト輪郭検出 を参考に 複数のオブジェクトの動き認識してみた。 動いていないと認識できない、物体の特定ができない、といった問題があり、 正確ではないけれど、ある程度認識することができる。

drawContours だけで輪郭を描画できる。

OpenCv で動きを検出したらビデオに出力

動きを検出したら、ビデオき書き出す

OpenCvで timelapse

既存のビデオファイルから、タイムラプスを作成する方法

fourcc : Windows 10 の場合、次の動作を確認した。

フォーマットfourcc
aviDIVX
aviDIVX
wmvWMV1
wmvWNV2
mp4MP4V

OpenCV でキャプチャーしたビデオをファイルに出力

OpenCV でキャプチャーしたビデオをファイルに出力

参考
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html