グレイスケールと2値化(OpenCVのテスト; 続き)

画像を読み込んでコピーできるなら、 その読み込んだ画像オブジェクトを使って加工してみる。

まず、元のカラー画像をグレイスケール( gray scale )に変換して表示する。

import cv2

img = cv2.imread('img.png')
img_gray = cv2.cvtColor(img, cv2.BGR2GRAY)        # グレイスケールに変換する

cv2.imshow('img_grayscale', img_gray)        # 画像を表示する
cv2.waitKey()        # キー入力を待つ(待たせないと、表示した次の瞬間プログラムが終了する)

cvtColor()関数も、元のデータを変更するのではなく、グレイスケールにした画像オブジェクトを生成して返す。

しかし、定数はなんでこんな名前なのか。BGRって、RGBの逆? 定数なんだから、こうだと言われれば使うまでだが、変な感じ。

次に、グレイスケールにしたものを2値化する。 引数で2値の境界を指定する。

import cv2

img = cv2.imread('img.png')
img_gray = cv2.cvtColor(img, cv2.BGR2GRAY)        # グレイスケールに変換する
img_binary = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)        # グレイスケール画像を、2値化する

cv2.imshow('img_grayscale', img_gray)        # 画像を表示する
cv2.waitKey()        # キー入力を待つ(待たせないと、表示した次の瞬間プログラムが終了する)

2値化するにあたり閾値を指定できるのは便利。 画像によって、真ん中がちょうどいいとは限らない。 明るい方に寄っていたり、暗い方に寄っている場合は、調整が必要。

基本的な処理を落ち着いて見ると、ライブラリ設計者の気遣いが感じられて面白い。 とりあえず。

OpenCV書き始め(あるいは休暇最終日のリハビリ)

修学旅行の引率を免れたのをいいことに、代休を消化して5連休。 のんびりできて助かったが、仕事の頭脳に切り替えるため、少しリハビリ。

そんな時はcodeを書くのが良いが、知ってるcodeを書いてもしかたないので、 OpenCVのテストをPythonで。

学生時代からあるライブラリだが、Pythonは当時無かった。 というか、Javaがデビューした頃なので、、Pythonなど知るわけもなく。

とりあえず、画像ファイルを読み込んで、コピーとリサイズしておく。

import cv2

img = cv2.imread('img.png', img)            # 画像ファイルを読み込む

もちろん読み込んだだけでは何も起きないが、リハビリのため一つずつ処理を実行。 そのまま別のファイルに書き込む。

import cv2

img = cv2.imread('img.png', img)            # 画像ファイルを読み込む

cv2.imwrite('img2.png', img)            # 読み込んだ画像データを、新しいファイルに書き込む

引数として「対象のファイル名」、次に「画像オブジェクト」。 それはそれで、わかりやすい。

「何を」「どこへ」という流れの順に書くのも納得感があるけれど、 「こういう順なのね」と気づいて確認して、実行するのはリハビリ安全策。

実際に新しいファイル「img2.png」ができていて、画像がコピーされているのを確認。

次に、リサイズ。 元の画像は横長だが、300x300 の正方形にしてから、別ファイルに書き込んでみる。

import cv2

img = cv2.imread('img.png', img)            # 画像ファイルを読み込む
cv2.resize(img, dsize=(300, 300))            # 読み込んだ画像データをリサイズする
cv2.imwrite('img2.png', img)            # リサイズした画像データを、新しいファイルに書き込む

しかしこれでは、元の画像と同じ内容が書き込まれる。

、、ということは、.resize()関数は、戻り値として処理結果の画像オブジェクトを返すだけで、 引数の画像オブジェクトを変更はしない。 あ、そ。

import cv2

img = cv2.imread('img.png', img)            # 画像ファイルを読み込む
img2 = cv2.resize(img, dsize=(300, 300))            # 読み込んだ画像データをリサイズして新しい画像オブジェクトを生成する
cv2.imwrite('img2.png', img2)            # 新しい方の画像オブジェクトを、ファイルに書き込む

これなら、リサイズ済みの画像オブジェクトをファイルに書き込むことができる。 (あたりまえだ) できたファイルを開くと、当然 300x300 のサイズになっている。

という辺りで、都合によりリハビリ終了。 (休日は休日で、家庭の事情があれこれあるため、)無理しない程度にとどめておこう。

とりあえず。

opencv-pythonをインストール(または、ようやく開発準備を開始)

今回の卒業制作では、なぜかスマホアプリが複数。

mac持ってないのにiPhoneアプリを作るなど、薄い発想だ、、 というより思いつきが浅い。

経験が有無ではなく、きちんとやる、という態度で生きてないと 土台が整わない。

それはともかく、codeレベルで追いかけていないと不都合なので 環境構築から。

本日は諏訪湖畔まで親戚を訪ねた後でリソースが少ないため、 とりあえず OpenCVPythonライブラリのみインストール。

念のため、以前にインストールしてないか確認して、 pip を update して、 インストールして、 インタプリタ環境で import して確認。

% pip3 list
% pip3 install opencv-python
% pip3 install opencv-contrib-python
% python3

>>> import cv2

インストールと import なら、特に失敗するわけもなく。 準備完了。

顔認識とか文字認識とかやる前に、OpenCVで遊んでおかないと。 続きはまた明日考える。

とりあえず。

toolを積極的に導入すべきこと(あるいは、永遠に効率UPを継続しないとワンオペやってられない件)

校内イベントのライブ配信をワンオペで取り組んでみると、 限界が具体的に体感できる。

個別には、できない事は無いにしても、同時に複数実行はできないし、 1アクションで実行したいが物理的に2アクションになってしまう事もあり。

最も差し迫って必要なことは、「カメラ切り替えと同時にPinP」。

ATEM MIni Proを使っていて、カメラの切り替えは簡単。 PinP(ワイプとも聞くがなぜかは知らん)も簡単。

しかし、「切り替え」てから「PinP」とすると、 うまくやっても「一瞬、カメラ映像のみ」になる。

それが演出として自然なら良いが、そんな計画はしてないので 「単にズレてるだけ」になる。

SQLで言うと、「DELETE & INSERT」でデータの更新はできるが、 2アクションなので、その間に別のクエリが割り込むと、大変まずいのと同じ。

ならば「UPDATE」文で1アクションにて更新処理を実行すれば問題ない。

ビデオスイッチャにはそんなのあるのか、というと、ある。 「Companion」というツールを使うと、いわゆる「マクロ」を組んで操作できる。

さらに、「StreamDeck」というハードウェア(ボタンが並ぶUI)と組み合わせると、 マクロをボタンに割り当てて、複雑な操作が1タップで実行できる。

aimfoc.com

別に、落ち着いて操作してれば教室1部屋くらいの空間ならワンオペで大丈夫、 と思っていたのだが、ちょっとそうもいかない現実。

ならばやるしかない。 今回のイベントは、12月にも、年明けにもあるんだし。 進歩していないと、生きてる意味がない。

先日まで「使いこなせると、よりHappyになれるハードウェア」と 思っていた「StreamDeck」。実は「無くてどうすんだこれ。無理だろう」 という代物だったことにようやく気づく。

我ながら遅い&鈍いが、気づいたからには、取り入れる。

良くも悪くもワンオペ(あるいは、「みんなでスキルアップ」へのジレンマ)

校内イベント「卒業制作プレゼンテーション」第1回を実施。 学生はライブ配信YouTubeライブ)を教室で視聴してチャットで質問等する形式。

今回は設営から配信から撤収まで完全にワンオペ。 昨年は協力してくれた他の職員におんぶに抱っこだったので、初ワンオペ。

やはり、というべきか、 ワンオペは大変。 でもワンオペは楽。

大変なのは、全部1人で処理すること。 そのため、テストがすこぶる不便であること。 (音や映像を送り出す人と、受けて聞いてみる人がいないと、不便) そりゃそうだ。

他のクルーとのコミュニケーションは、実はかなりのコスト。 事前の情報共有、打ち合わせをしっかりしないと動けない。

また、本番中の各種トラブルや「想定外」にも全員協力して対応する。 そのためには、事前のコミュニケーション、プロトコルの共有が欠かせない。

というわけで、他人とのコミュニケーションコストが結構大きいので、 ワンオペは、その意味ではかなり楽。自分だけで考えて行動すればいいので!

しかしまあ、実施に人間1人ではマンパワーが足りないのは明白。 1ヶ月後の「第2回プレゼン」までには、状況を改善しないと。

他の人間にスキルをインストールして、プロトコルを通して、 真っ当に取り組んで、、みないとね。

怒涛のように溢れる見事なサウンド(または世界最高のピアニストの音に酔った件)

マルタ アルゲリッチの名前は、もう何十年も「世界最高」という意味。 モーツァルトも、ラフマニノフも、ルトスワフスキラヴェルも、 一つひとつの音が輝いて、パワー溢れる見事なサウンド

ホール中に響きが広がって、ちょっと音に酔ってしまうレベル。

卓越した技量で繰り出されるアウトプットは、どんな分野であれ そういうものになる。

コードを書いても、映像を作っても、ライブ配信の音を作っても同じ。 大事なことは「確かな技量と経験に裏打ちされた表現」であること。

「卓越した」技量でなくても、真っ当な、正しい技術がないと、 無駄が増えて、手間と迷いが増えて、クォリティが下がる。

何より「本当にこれでいいか?」なんて考えていたら、 いいものになるわけない。

「ゼロではないので、ゼロよりマシ」というレベルで、 ライブ配信と1人で格闘するのは、なかなか厳しい。

明るさや色の表現、そのためのカメラや編集の設定、テクニック。 音を揃えるために必要なテストと道具立て、チェックと音作りの段取り。 映像づくりのためのライティング(これは経験ゼロ)。

基本的に学ぶのが好きで、新しい技術に取り組むのが楽しいタイプ。 とはいえ、確実な何かを辿って進んでいきたい。

もちろん繰り返しと膨大な時間をかけて経験値をうっすら 重ねていくのも好きだけど、業務上の取り組みとしては、 もうちょっと効率よく進みたい。

というわけで、とりあえず、できる範囲で格闘しながら ちびちび新しい取り組みをこなしていく日々。

(要するに明日のイベントを何とか乗り切りたい)

校内イベントの配信システム(または、言わなきゃわからない者はやらなきゃわからない件)

卒業年次の学生が取り組む「卒業制作」。 作るだけではなく、3回のプレゼンテーションがあり、今週金曜日は第1回。

コロナ下の近年は、スピーチコンテスト同様に1部屋を会場として、登壇者 以外は各教室でYouTubeライブを視聴、という形式で実施。

ホールを借りて実施していたのに比べると、テキストで気軽にコメントや質問ができて便利。 録画も残って見直せるのも助かるし。

しかし配信を担当するとなると、なかなか面倒であって頭の痛いことではある。 先月末のスピーチコンテストでは、学生7名の協力により運営できたが、今回はワンオペ。

なぜなら7名とも2年生で、自分たちのプレゼンがあるから。 もちろんそれは大事なことで、十分に経験値を積んでもらいたい。

また、カメラも少なく、カメラワークが必要ないので、ワンオペで問題はなかろう。 (現実的には、これまで他の誰かにオペを任せて周辺のサポートにあたっていたので正直きついけれど、まぁこなせはする)

問題は、スキルが低いためサウンドのコントロールや映像の明るさをきれいに揃えられないこと。 これは当分どうしようもない。勉強と練習とテストが必要。経験値が貯まらないとLVアップできない。 (LVアップに際して呪文を身につける仕組みに、ようやく共感できる今日この頃。40年くらいかかっとる)

あともう一つが、周囲の様々な人間が、映像・サウンド・配信について知らないために配慮ができず 迷惑なアクションをすること。

産学連携ということでベテランエンジニア&経営者の方が卒業制作の指導に協力してくださり、 プレゼン当日もオンラインで視聴してコメントしていただける予定だったのだが、、 いつの間にか会場に来られることになっていたりして。

ワンオペだっつーのに、カメラが1台余計に必要。 また、電子黒板の配置を変えて、登壇者への返しモニタにしようと思っていたが、 会場に観客がいるとなると、スクリーンとして必要になった。

決めてきた人間に悪気がないのは知っている。長い付き合いで、その点は信頼している。 しかし、配信への影響を想定するとか、できなくても事前に相談するとか、そんな対応が あればかなり便利。つまり、ないのでかなり不便。

もちろん自分でも、取り組んでみたからようやく少しずつ、色々わかり始めたわけで、 体験無しにそれを想像するのは難しい。というか自分では無理。絶対できないと思う。

ただ、そういう未知の要素があるんじゃないか、という気遣いは、できてもいいだろうに とは思う。自分の能力がそう高くない事を知っているので、経験に裏打ちされた理解がない時は 経験者に相談し、共犯者になってもらう習慣はある。

まぁそれは、心の余裕、健康と、教養の問題。 知らないことに対処する、見えないものを見るのは、面白いんだけどね。

もちろん、経験するに如くはなし。 ていうか、やってみろよ、まず。

、、と、そこまで計画し、実行可能な段取りをつける能力がないもんで愚痴ることになる。 マインドフル瞑想でも、日々取り組んでみようかな。