Edited at

【顕微鏡】Kenko-デジタル顕微鏡で遊んでみた♪

物体検出や識別の応用として、デジタルデータになってしまえば対象はミクロ(顕微鏡や胃カメラみたいなファイバーカメラも(ミクロの決死圏ができるかも))も宇宙(望遠鏡も電波望遠鏡も、何でも)も拡張が可能ということで、事始めにデジタル顕微鏡の画像データ(とりあえず動画)を直接PCに取得してみた。


当面の目標

①PCに動画を取り込む

ゾウリムシとかプランクトンとか、植物発生など物体識別機能をつける

20160214220229.png

【生物基礎】第1章 生物の特徴(細胞)@http://terakoya-seibutsu.hatenablog.com/より引用

③顕微鏡から双眼鏡や天体望遠鏡へ

④。。。


今回やったこと

①PCに動画を取り込む

もともと、kenko-デジタル顕微鏡は、ソフトがCD-Romで提供されているが、自前のPythonコードで取り込んだ

今回の機種は、「Do・Nature デジタルマイクロスコープ STV-451M II」

Do・Nature デジタルマイクロスコープ STV-451M II


取得できた動画例

残念ながら、赤血球は見えませんでした。。。が凝固の時系列変化が見えました。

※どちらかというと、この顕微鏡(Max:400倍)だと肉眼で見える範囲の動的変化の観察によさそう。。

安価なデジタル顕微鏡で血液が凝固する様子を観察してみた♬(画像サイズ200x150)




安価なデジタル顕微鏡で血液が凝固する様子を観察してみた♬II(画像サイズ640x480)




※画像をクリックするとYouTube動画につながります


コードは以下に置いた

MicroScope/kenbikyo_Key.py


コード解説

動画出力するためのおまじない関数を定義

from time import sleep

import cv2

def cv_fourcc(c1, c2, c3, c4):
return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)

動画のファイル名と出力関数の定義

動画サイズは(200,150)で実際の縦横サイズと同じ形状になった。

このカメラの素子の画素数は200万画素

そして付属ソフトの動画は640×480(VGA)となっているので、ここまで大きく出来る。

※実際には1280x960=1,228,800でもできた

ただ、ファイルが大きくなるので分解能は落ちるが200,150でも今回程度の分解能は出る。

イメージセンサー    約200万画素CMOS

静止画 約130万画素CMOS
動画 320×240(QVGA)、640×480(VGA)、※5~12fps

以下main関数。

def main():

OUT_FILE_NAME = "kenbikyo_video.mp4"
FRAME_RATE=30
w=200 #1280
h=150 #960
out = cv2.VideoWriter(OUT_FILE_NAME, \
cv_fourcc('M', 'P', '4', 'V'), \
FRAME_RATE, \
(w, h), \
True)

カメラの番号は内臓カメラが0、外付けUSBカメラが1である。

    cap = cv2.VideoCapture(1)

sleep(s)のsの大きさにより動画のfpsを調整している。

すなわち、ピント調整のためには小さな値0.1とし、動画撮影・保存時は1s/コマや5s/コマなどの大きな値にすることにより、fpsを調整できる。

※外から与えることもできるが、実験時なのであまり凝らないこととした

また、当初はピント調整が入るので最初は非撮影モードのis_video = 'False'としている。

frameにfpsを書き込んで、cv2.imshow('test',frame)。

※名称がtestなのはまだまだ作成途中だということを意味する

    is_video = 'False'

s=0.1
while True:
timer = cv2.getTickCount()
ret, frame = cap.read()
sleep(s)
fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
# Display FPS on frame
cv2.putText(frame, "FPS : " + str(int(1000*fps)), (100,50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50), 2);
cv2.imshow('test',frame)

key = cv2.waitKey(1)&0xffでkey入力を受付、動画保存の切り替えやアプリの終了などを制御している。

        key = cv2.waitKey(1)&0xff

#print("key=",key,ord('q'))
if is_video=="True":
img_dst = cv2.resize(frame, (int(200), 150)) #1280x960
out.write(img_dst)
print(is_video)

if key == ord('q'): #113
#cv2.destroyAllWindows()
break
elif key == ord('p'):
s=1
is_video = "True"
elif key == ord('s'):
s=0.1
is_video = "False"

以下で、testを呼び出す。

if __name__ == '__main__':

main()


まとめ

・デジタル顕微鏡の動画をPCに取り込んだ

・血液の凝固動画をコマ撮り撮影できた

・物体識別機能を追加しよう

・プランクトンや発芽などの動的観察をしよう