寫這一篇文章主要是做一個簡單的筆記,筆記任然有待完善,先做一個簡單的記錄。
Python2.7-OpenCV+Tensorflow+Keras環境安裝部署
1. tx2板子中自帶python2.7以及python3.5的環境,但是需要安裝pip
Install pip and virtualenv for Ubuntu 16.04LTS Maverick and newer,輸入下面命令:
sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade pip
sudo pip install --upgrade virtualenv
也可以通過以下方式安裝:
For Python 3 :pip3
sudo apt-get install python3-pip
For Python 2 :pip
sudo apt-get install python-pip
2. pip安裝完成之後可以修改pip源
臨時使用:
可以在使用pip的時候加參數 -i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent
,這樣就會從清華這邊的鏡像去安裝 gevent 庫。
阿里源地址爲:
https://mirrors.aliyun.com/pypi/simple
永久使用:
linux下,修改 ~/.pip/pip.conf (沒有就創建一個), 修改 index-url至tuna(沒有就添加),內容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
3. 使用pip安裝有關的依賴包
可以使用以下幾種方式來安裝:xxx爲包名,如 keras;
sudo pip install xxx
sudo pip install --extra-index-url=https://developer.download.nvidia.com/compute/redist/jp33 xxx
sudo apt-get install python-xxx
注意以下幾個包的安裝(我目前碰到的比較頭疼的):
- 安裝pillow
首先安裝支持包:
sudo apt-get install libjpeg-dev libfreetype6-dev zlib1g-dev libpng12-dev
之後:
sudo pip install pillow
- 安裝tensorflow
sudo pip install --extra-index-url=https://developer.download.nvidia.com/compute/redist/jp33 tensorflow-gpu
- 安裝keras
Jetson tx2的tensorflow keras環境搭建
之後跑tensorflow的代碼可能會出現一些版本不兼容的問題,需要修改tensorflow的模型等。這個就隨機應變了。兵來將擋 …
網絡攝像頭rtsp視頻流配置以及讀取
1. 修改本地IP地址,以及配置DNS(需要將本地IP修改成和)
sudo vim /etc/network/interfaces
加入以下內容:
auto eth0 # 設置自動啓動eth0接口
iface eth0 inet static # 設置爲靜態ip
address 192.168.10.58 # ip地址
netmask 255.255.255.0 # 子網掩碼
gateway 192.168.10.1 # 默認網關
dns-nameservers 8.8.8.8 114.114.114.114 # 配置多個DNS
其他:
sudo vim /etc/resolv.conf # DNS有關配置,開機重啓之後就會清空
如果網絡無法啓動或不穩定,可嘗試如下操作:
sudo gedit /etc/NetworkManager/NetworkManager.conf
將 managed=false 設置成 managed=true
2. python讀取rtsp視頻流demo
import cv2
capture = cv2.VideoCapture("rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0") # 換成你的攝像頭的IP地址
while True:
ret, frame = capture.read()
cv2.imshow("frame", frame)
if 0xff & cv2.waitKey(1):
break
cv2.destroyAllWindows()
3. C++讀取rtsp視頻流demo
#include "opencv2/opencv.hpp"
#include <string>
int main()
{
std::string str = "rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0";
// cv::VideoCapture cap("rtsp://admin:[email protected]:554/h264/ch1/main/av_stream");
cv::VideoCapture cap(str);
cv::Mat img;
cv::namedWindow("test", CV_WINDOW_NORMAL);
cv::setWindowProperty("test", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
while(1)
{
cap >> img;
cv::imshow("test", img);
if(27 == cv::waitKey(1))
break;
}
return 0;
}
USB攝像頭配置以及讀取
1. python讀取usb攝像頭demo
import cv2
capture = cv2.VideoCapture(0) # 0 爲默認攝像頭,可以根據自己接的攝像頭接口進行修改
while True:
ret, frame = capture.read()
cv2.imshow("frame", frame)
if 0xff & cv2.waitKey(1):
break
cv2.destroyAllWindows()
2. C++讀取usb攝像頭demo
#include <opencv2/opencv.hpp>
#include<ctime>
using namespace cv;
using namespace std;
int main( )
{
//【1】從攝像頭讀入視頻
VideoCapture capture(0);
//【2】循環顯示每一幀
int j=0;
capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,720);
while(1&&(j<100))
{ clock_t start,finish;
start=clock();
j++;
Mat frame; //定義一個Mat變量,用於存儲每一幀的圖像
capture>>frame; //讀取當前幀
// imshow("讀取視頻",frame); //顯示當前幀
cout<<frame.size()<<endl;
finish=clock();
cout << finish-start << "/" << CLOCKS_PER_SEC << " (s) "<< endl;
waitKey(1); //延時30ms
}
return 0;
}
C++ 代碼編譯方法:
build.sh
sudo g++ -o capture -I/usr/include -O3 -Wall testmain.cpp -L /usr/lib -lopencv_core -lopencv_imgproc -lopencv_flann -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_objdetect -lopencv_stitching -lopencv_videoio
build2.sh
sudo g++ -o capture2 -I ../opencv3.4/include -O3 -Wall testmain.cpp -L ../opencv3.4/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_video -lopencv_videoio -lopencv_imgcodecs