之前曾買一個很便宜

型號是OV7670無fifo鏡頭想練習如何寫Video的程式

對於影像處理知識幾乎是零的狀況下剛開始有些困難

所以遲遲未著手測試

 

某日有些理由要做人臉辨試

於是上網找了Arduino Uno與OV7670無fifo的範例程式後做測試

發現程式裝好了硬體也接好了

影像怎麼讀到電腦是問題

影像讀出有高手用了Java透過USB來撥放

老男人下載來使用發現光是Install java的環境就非常麻煩

而且還不是透過WiFi來讀影像

只好放棄OV7670這個鏡頭

然後再上網找相關資料

最後決定用NodeMCU 與OV2640 MINI 2MP鏡頭來做測試

NodeMCU用ESP-12E或ESP-32

(ESP-32追加,Arduino IDE需新增板子,更換函式庫)

裝好如下圖

800x600.JPG

 

使用網路上分享的範例程式

點我

安裝完設定好WiFI開起瀏覽器輸入NodeMCU做為Server的IP即可使用

功能是拍照片與監看

可選照片尺吋等等

如下圖(老男人的照片 傷眼請原諒)

WiFi Camera-04.png

 

這次不需要拍照功能

得改程式

有監視(Video Stream)的功能即可

老男人只得硬著頭皮改

改好後NodeMCU連上WiFi

使用如下

1.打開瀏覽器(老男人是用google chrome)

WiFi Camera-01.png

 

2.輸入NodeMCP做為Server的IP

輸入完按Enter

WiFi Camera-02.png  

按完Enter

瀏覽器就直接進入監視畫面(Video Stream)

 

使用WiFi的好處是

手機接到Wifi也可以監看

IMG_2911.PNG

沒有漂亮麻豆

不用有所期待ㄏㄟ

 

最後配合的Python程式

做人臉辨試也成功了

只是有些Lag

可能是NodeMCU記憶體太小了

換更強大的Wifi晶片是可行的

 

Python程式的人臉辨識不是老男人做的

老男人僅是將Video透過WiFi送出

對方用Python程式收下影像後做人臉辨識

所以

不要跟老男人要Python的程式^^

 

後記

WIFI監視器四處都在賣

為什麼要自己做

因為買現成的產品無開放程式碼

只能照產品既有功能使用

比較適合一般使用者

例如只想透過網路監視家裡之類的

買現成的就好

 

如果想寫程式去控制等等

就不太適合

 

嗯...

知道DIY的理由了ㄏㄡ

不要再說怎麼不去買市面上賣的就好^^

 

---20180911補充---

Python3讀取Nodemcu+Ov2640攝影機的影像並拍照

讀取320 x 240 的Video stream比較不Lag 

python3-nodemcu-ov2640.png  

按白鍵即可拍照

由於讀出影像是320 x 240

照片也是這尺寸

opencv_frame_09_11_2018_10_19_12.png  

 

創作者介紹
創作者 老男人 的頭像
老男人

老男人幻想世界

老男人 發表在 痞客邦 留言(36) 人氣()


留言列表 (36)

發表留言
  • 橙光
  • 依然如讀天書!@@"
    不過老男人不老 也算型男一枚,不會傷眼,請放心 ^^
  • 是喔
    感謝橙光的美言

    老男人 於 2018/05/25 21:23 回覆

  • Angel
  • 好厲害耶~
    不過有看沒懂 欣賞就好...^^
  • 美女不需懂這些粗活
    男人們會加油
    晚安

    老男人 於 2018/05/25 21:24 回覆

  • koko
  • 金鰲!! 雖然有看沒有懂~ 再+1........

    老帥哥晚安~~~ [:emotion1379949822-4187777936.gif]
  • 晚安
    假日愉快

    老男人 於 2018/05/25 21:25 回覆

  • 阿國
  • 午安~~
    超強~~~
  • 感恩

    老男人 於 2018/05/25 21:25 回覆

  • 亮與貞
  • 推...您真棒...令人欽佩啊...
  • 感恩

    老男人 於 2018/05/27 00:33 回覆

  • 阿甘
  • 我適合直接去買市面上的, 呵呵
  • 阿甘的專業不在此啊^^
    周日愉快

    老男人 於 2018/05/27 00:35 回覆

  • 安綺~♥ 滴滴咕咕
  • 推推~
    晚安安,
    謝謝好友的分享!
    祝福周一順心愉快。。
  • 感謝推推~

    老男人 於 2018/06/05 15:46 回覆

  • 陳威廷
  • 老師好:想請教老師 我如果不把他當server 直接讓他連wifi 再給他桌電的ip是找的到的嗎? 因為我這樣使用再用ip連網頁的時候都出現404error 想請教一下 謝謝
  • 如果是這樣那
    是否將桌電設計為Server
    nodemcu設計為client
    不過Nodemcu當Server
    等pc來連似乎比較容易
    ———————————
    Sorry,我好像看懂你的意思了,
    例如你家的WiFi名稱是ABC
    Nodemcu 要連上ABC
    然後你要看視訊串流的電腦也要連上ABC
    在相同網域執行應該就不會出現你說的問題


    如果要不同網域
    例如是中華電信好了
    要申請固定ip然後指定通信port
    這樣才能在網際網路上連線
    也就是外部來連線也可以

    老男人 於 2018/09/08 22:37 回覆

  • 悄悄話
  • 悄悄話
  • wetim5566
  • 真的是要相同網域耶 太感謝了 那想再請問一個 想把拍出來的照片自動存到一個路徑或資料夾 能怎麼做呢?
  • 現在都是用手機回應回覆
    明天上班才有電腦
    那時再跟你討論

    老男人 於 2018/09/09 09:43 回覆

  • wetim5566
  • 好的 感謝您
  • 題外話
    Nodemcu本身沒有SD卡
    記憶體又小
    你其實可以直接從網頁下載下來

    老男人 於 2018/09/09 09:46 回覆

  • wetim5566
  • 因為我需要對拍到的照片做影像辨識處理,所以想先讓他能自動拍照後載到資料夾內。
  • 這樣的話PC側使用python
    看能不能直接抓下網頁上的照片
    例用opencv來辨識

    或者用Python安裝的opencv
    將網頁串流視訊即時讀取
    其實那視頻不就是ㄧ張張的照片
    能讀到視訊就能抓到圖片
    反而不要在Nodemcu多所著墨
    因為nodemcu晶片處理影像很弱
    光是視頻而已就會Lag對吧
    所以照片
    用PC從nodemcu丟影像到瀏覽器那路徑(ip,port)抓才是正解

    ------------------------------------------------
    你的部落格無法留言,
    我要通知你是因為硬碟故障,
    Arduino的最新程式幾乎沒有備份,
    雖然如此還是可以討論,
    上午我開Python3起來與樹莓派使用,
    opencv 可以抓到ip camera的影像,
    也可以截圖存到指定資料夾,
    (樹莓派3+PI Camera)或者(Nodemcu + ov2640) 也算是ip camera
    因此我建議你在你的電腦安裝Python3
    也安裝Python3 相對應的opencv
    如果你要朝我建議的方向做,
    可以繼續討論,
    總之,
    電腦Python3(opencv)透過wifi抓(Nodemcu + ov2640) 或(樹莓派3 + Pi Camera)
    可討論。

    (09:00~17:00之間我有電腦討論會比較精確,
    其他時間只用手機上網,討論就只能是個方向)

    如果你要用Nodemcu做完所有事,
    那請你自行加油囉^^

    老男人 於 2018/09/10 12:15 回覆

  • wetim5566
  • 之前有試著找過python從網頁抓取相片 但url http://ipadress/capture 從這抓圖一直不成功 想請問您之前有成功抓取過嗎? 還有arducam能寫成自動定時拍照嗎? 謝謝您
  • 沒有,我只有刪程式,使用Video stream而已。
    ———————-
    這裡是抓照片那個check box, void camCapture(ArduCAM myCAM)

    這裡是sumit那個按鈕void handleSubmit()

    你想nodemcu自動拍照,要在這裡下功夫。

    ————-////———-
    不用nodemcu拍照的話,

    我這篇文章是用python 讀岀video stream,
    所以拍照我沒用。

    但是python若讀岀video stream,
    是可以截圖,今天我有用樹莓派測試,
    電腦上的python 可從WiFi 讀岀樹莓派的video
    stream,
    然後我是設計按speac鍵就截一張圖,Ok。
    當然不要用按的用其他方式也可以。

    看你的需求是要改nodemcu還是
    我後來的做法。

    老男人 於 2018/09/10 19:41 回覆

  • wetim5566
  • 我ˊ之前有想過用樹梅派 不過成本好像偏高 被教授否決
  • 是用教授的錢嗎?哈!
    不過用modemcu
    如本篇文章有講,
    會有Lag的問題。

    完全用筆電不用樹莓派與Nodemcu,
    處理速度最快。

    老男人 於 2018/09/10 18:18 回覆

  • wetim5566
  • 我決定嘗試使用python3+opencv做處理 想跟跟您請教 該如何起手
  • 我下班了,明天請早。
    —————————-
    所以你要用筆電以及筆電的攝影鏡頭嗎?
    不需要Nodemcu了嗎?

    老男人 於 2018/09/10 18:14 回覆

  • wetim5566
  • 對 教授的錢 哈

    不是 是用您上面的方法,成功拍照後,再將拍到的照片抓到電腦中做處理。
    因為capture那個是不是刷新網頁之後就會拍一張,想利用這點來做。但我需要寫入定時拍照跟數字辨識,不知道這個python能否辦到?

    跟您提一下,我現在是負責開發瓦斯錶自動抄錶,所以我需要將相機架在瓦斯錶上,自動定時拍照,然後利用wifi將他傳入電腦後,數字辨識將辨識到的數字建立成文字檔或之類的,這是我的構想。
    沒關係,您有空在回覆我就好,很感謝您的回覆了。
  • 了解,nodemcu 傳出的影像是jpeg的原始碼,
    所以用python 接收時要要判斷一張照片的起點與結束點,
    這樣才算收到一張,給你提示起始碼最後的Hex數字是8,
    結束碼是9。中間的編碼稍微看看就好。
    https://medium.com/@pinsplay/jpeg-%E7%B7%A8%E7%A2%BC-%E8%A7%A3%E7%A2%BC-16fb0e1bd273

    你事先了解一下有幫助。

    同時python3與opencv也可以裝起來了。
    裝好再來我這裡留言,我再回覆。

    然後可以私下告訴我是哪間學校嗎?
    你不公開我也不會公開,只是想知道何自己討論的對象來自於哪裏。

    老男人 於 2018/09/10 18:56 回覆

  • 悄悄話
  • 悄悄話
  • wetim5566
  • 我使用anaconda 已安裝好python 3.6.6+opencv3 想請問opencv3可以像python一樣確認版本是否安裝完成嗎? 因為安裝完後不確定是否成功 哈
  • 你開python idle
    然後import cv2
    按run
    沒錯誤就是裝好了

    另外import xxx
    如果你沒安裝xxx
    會有error
    請google
    解答多到數不完

    其他若error的時候也請google
    python真的很普遍

    老男人 於 2018/09/11 16:34 回覆

  • wetim5566
  • 那我都完成了~~
  • 請你看前一則,與前前一則回覆。

    老男人 於 2018/09/11 16:35 回覆

  • wetim5566
  • python 我有使用過 但那時候使用環境是linux 需要的函式庫用指令裝很快 windows也能用指令裝嗎 還是需要去網頁上抓下來
  • windows cmd
    pip3 install xxx

    老男人 於 2018/09/11 16:42 回覆

  • wetim5566
  • 好的 太感謝您了 我今天arducam不在手上 現在我先了解您打的code 明早會試試看 有問題再跟您討論 實在很感謝老師的幫忙
  • 缺元件會error喔,
    記得pip3 install xxx

    老男人 於 2018/09/11 16:46 回覆

  • wetim5566
  • 我在用anaconda使用 pip3 install xxx時出現這個error
    Could not find a version that satisfies the requirement as (from versions: )
    No matching distribution found for as
    想請問這有可能是什麼原因呢
  • 不好意思,我不知道什麼是anaconda,
    我python是直接裝在win10,也都是google來的。
    ------------------------------

    程式的這兩行刪除
    import warnings
    warnings.simplefilter("ignore", DeprecationWarning)

    ----------------------
    這行
    img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)

    改為
    img = cv2.imdecode(np.frombuffer(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)

    (修改原因是python2 --> python3的語法 )
    ---------------------------------
    今天發現python用一段時間會error
    所以又改些程式碼
    原因多是python2與python3轉換的bug
    如果你也遇到了

    這個
    from urllib.request import urlopen
    改為
    import urllib.request


    這個
    stream = urlopen(url)
    改為
    stream = urllib.request.urlopen(url)

    程式都有更新

    老男人 於 2018/09/12 14:13 回覆

  • wetim5566
  • bts += stream.read(CAMERA_BUFFER_SIZE)
    這一行顯示了這個error
    "message": "E0001:invalid syntax (<unknown>, line 23)",
    想請問是為什麼呀?
  • 原先base是python2
    我改為python3

    今天做耐久測試發生一段時間之後
    python2與python3的異常
    你先整個再複製一次

    執行後再來討論
    -----------------------
    你的硬體是nodemcu + ov2640嗎?

    還有這行存在嗎?
    CAMERA_BUFFER_SIZE = 1024

    老男人 於 2018/09/12 14:32 回覆

  • 悄悄話
  • 悄悄話
  • wetim5566
  • 已寄送
  • 你沒使用過python吧?
    程式沒問題,
    是語法格式貼錯的關係。

    已回信,你看我的調整。
    --------------------------
    部落格回應欄文字會切齊,
    直接複製貼上語法格式會錯誤。

    老男人 於 2018/09/12 15:25 回覆

  • wetim5566
  • 成功了!大師真的太厲害了,但有時候執行python 會出現這樣的error,要過一陣子在執行才會正常,有可能是什麼原因嗎?

    C:\Users\wetim>python test.py
    test.py:28: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
    img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
    Traceback (most recent call last):
    File "test.py", line 28, in <module>
    img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
    cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:737: error: (-215:Assertion failed) !buf.empty() && buf.isContinuous() in function 'cv::imdecode_'
  • 這行
    img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)

    改為
    img = cv2.imdecode(np.frombuffer(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)

    (修改原因是python2 --> python3的語法 )

    老男人 於 2018/09/12 19:07 回覆

  • 悄悄話
  • wetim5566
  • 了解~~ 太感謝大師了!謝謝,受益良多
  • 我也會找找數字辨識
    如果有做就發文分享
    再來討論

    這篇就結束囉

    老男人 於 2018/09/12 19:42 回覆

  • wetim5566
  • 好的,您關注您,期待您的分享。
  • 晚安

    老男人 於 2018/09/12 22:16 回覆

  • tony18385
  • 不好意思打擾

    想請問老師假如只是想在網頁端有個監視器 可以用OV7670就好嗎?

    (搜尋過 兩個價錢有差啊)

    另外我的NodeMCU已經有另外接L9110S 能在網頁端控制遙控車了

    可以再買擴展板外接再另外外接OV7670嗎?
  • OV7670好像有兩種,要有FIFO功能的,才好用,可能比你看到的貴。
    但是我沒用OV7670做過,無法給你肯定答案,
    我這篇買的OV7670是沒有FIFO功能的,
    因為難用所以我並未成功使用他。

    老男人 於 2018/10/04 17:51 回覆

  • tony18385
  • 我查了,有帶FIFO的確貴了一點,感謝老師的回答。
  • 不客氣

    老男人 於 2018/10/16 18:08 回覆