Twitter「一部の画像/動画をアップロードできません。」

OpenCV で動画を作成し、Twitterに動画を投稿しようとすると、「一部の画像/動画をアップロードできません。」のエラーが発生する。

fourcc = cv2.VideoWriter_fourcc(* ‘mp4v’)

ではなく、次のように h264 コーデックを使用する。

fourcc = cv2.VideoWriter_fourcc(* ‘h264’)

Capturing Youtube by OpenCV

Reference

https://www.366service.com/jp/qa/ad87eecb1989830886612272067df0eb
It needs some changes.

Environment

macOS BigSur

Visual Studio Code

Python 3.8.5 64bit

Prerequisites

$ pip install cv2
$ pip install pafy

Code for macOS

import cv2
import pafy

# Tokyo Station
url = 'https://youtu.be/6YRUWrkV2R4'
video = pafy.new(url)

streams = video.streams
for i in streams:
    print(i)

# get best resolution regardless of format
best = video.getbest()

# start the video
cap = cv2.VideoCapture(best.url)
while (True):
    ret, frame = cap.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

A beautiful sea of clouds at Chichibu, Japan.

This video has been remixed from Chichi Live Camera photos by Python + OpenCV + Visual Studio Code on mac.

import os
import time
import datetime
import urllib.error
import urllib.request
import cv2

def download_file(url, dst_path):
    try:
        with urllib.request.urlopen(url) as web_file:
            data = web_file.read()
            with open(dst_path, mode='wb') as local_file:
                local_file.write(data)
    except urllib.error.URLError as e:
        print(e)

fourcc = cv2.VideoWriter_fourcc(* 'h264')
fps = 10
out = cv2.VideoWriter('out.mp4', fourcc, fps, (H,V))

startTime = datetime.datetime(yyyy, mm, dd, HH, MM, SS)
x = duration
for interval in range(x):
    t = startTime + datetime.timedelta(minutes=interval)
    print(datetime.datetime.strftime(t, "/%Y%m%d/%H%M%S.jpg"))
    tstr = datetime.datetime.strftime(t, "/%Y%m%d/%H%M%S.jpg")
    url = 'https://*********' + tstr
    dst_path = datetime.datetime.strftime(t, "images/%Y%m%d%H%M%S.jpg")
    if os.path.exists(dst_path):
        print("skip")
    else:
        download_file(url, dst_path)
        time.sleep(10)  # Don't rush to 

    img = cv2.imread(dst_path, cv2.IMREAD_COLOR)
    # 画像の大きさを取得
    # height, width, channels = img.shape[:3]
    # print("width: " + str(width))
    # print("height: " + str(height))
    out.write(img)

out.release()

Chichibu Live Camera

You can find out beautiful photos of Chichibu Live camera from here.

https://navi.city.chichibu.lg.jp/cloudview/

Anohana: The Flower We Saw That Day

Chichibu is also famous for the animation Anohana: The Flower We Saw That Day. It was on air in 2011, but still may anime fans are visiting Chichibu, the place of anime scenes.

TimeLapse by mac Mini + OpenCV + Python

Environment

macOS Catalina 10.15.6

OpenCV

Python 3.8

Tyhoon HAISHEN is coming!

Source Code

import cv2

RATE = 30
cap = cv2.VideoCapture(0)
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*'h264')
out = cv2.VideoWriter('out.mp4', fourcc, fps, (int(w), int(h)))

count = RATE
while True:
    ret, frame = cap.read()
    if ret == True:
        if count == 0:
            out.write(frame)
            count = RATE
        count -= 1
        cv2.imshow('frame', frame)
        keyboard = cv2.waitKey(30)
        if keyboard == 27:
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()

mac, VisualStudio Code, OpenCV, VideoCapture, Crash due to PRIVACY VIOLATION

現象 

mac OSで、Visual Studio Code で、次のコードを実行すると、クラッシュする。

import cv2
cap = cv2.VideoCapture(0) # ここで、Pythonがクラッシュする。

環境

Mac OS: Catalina 10.15.6

Visual Studio Code: 1.48.2

Python 3.8.4

原因

クラッシュレポートを見ると、次のようになっていて、

Crashed Thread: 1 Dispatch queue: com.apple.root.default-qos
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY

Thread 1 Crashed:: Dispatch queue: com.apple.root.default-qos

0x00007fff71fb4411 abort_with_payload + 9 3 com.apple.TCC 0x00007fff6868559f __CRASHING_DUE_TO_PRIVACY_VIOLATION + 163
4 com.apple.TCC 0x00007fff68683531 __TCCAccessRequest_block_invoke.114 + 500

CRASHING_DUE_TO_PRIVACY_VIOLATION

macOS 10.15 Catalinaでは「User Consent」がさらに強化され、アプリがスクリーンキャプチャの撮影や書類、ダウンロードフォルダへのアクセスする際にユーザーの承認が必要に。

Visual Studio Code が Python を実行する段階で、Permission を取得していないのが原因と思われる。

Workaround

調べた限りでは、解決策は見つからず、次のワークアラウンドしかない。

方法1

コマンドラインから、sudo で Visual Studio Codeを起動する。

$ sudo /Applications/Visual\ Studio\ Code.app/Contents/MacOS/Electron 

方法2

sudo /bin/bash でターミナルを起動し、Python を起動し、直接 実行する。

OpenCV on Mac with Visual Studio Code

OpenCV on Mac のための環境設定のメモ

2020/7/22 時点の情報です。

Homebrew

OpenCV をインストールするためにまず Homebrew をインストールする。

/bin/bash… を実行する。
xcode 用のコンソールもインストールされる。
$ brew install opencv で、opencv をインストール

Visual Studo Code on Macをインストール

Visual Studio Code on Mac にしたがって、Visual Studio Code をインストールする。

Getting Started with Python in VS Code

Getting Started with Python in VS Code にしたがって、Python の環境をセットアップする。

これで、numpy, matplotlib が使えるようになった。

OpenCV のインストール

$brew install opencv を実行する。

pip3 install opencv-python を実行する。

OpenCV Extentions をインストール

Opencv Snippets, OpenCV-intellisense を追加する。必須ではない。

OpenCVの実行例

cv2に対する lint エラー対応

cv2 に対して、pylint エラーが表示される。

この対応としては、メニューから、[Code] -> [Preferences] -> [Settings]

Python > Linting : Pylint Argsに

–extension-pkg-whitelist=cv2

を追加する。

自動フォーマッター対応

メニューから、[Code] -> [Preferences] -> [Settings]

Editor: Format On Save、 にチェックを入れる。

Editor: Format On Save、 にチェックを入れると、autopep8 をインストールするかと聞いてくるので、インストールする。

これで、セーブ時に自動フォーマットしてくれるようになる。