dlib note
This commit is contained in:
parent
4385b63c3b
commit
6360db8133
36
dlib/install.md
Normal file
36
dlib/install.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# dlib安装
|
||||||
|
|
||||||
|
## 安装编译源码
|
||||||
|
``` bash
|
||||||
|
git clone https://github.com/davisking/dlib.git
|
||||||
|
|
||||||
|
cd dlib
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
|
||||||
|
cmake --build . --config Release
|
||||||
|
|
||||||
|
# 安装python包
|
||||||
|
cd ..
|
||||||
|
python3 setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA
|
||||||
|
```
|
||||||
|
|
||||||
|
## 编译程序
|
||||||
|
|
||||||
|
- use g++
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
g++ -std=c++11 -O3 -I.. dlib_package_root/dlib/dlib/all/source.cpp -lpthread -lX11 example_program_name.cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
- use cmake
|
||||||
|
|
||||||
|
> nano CMakeLists.txt
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
project(test)
|
||||||
|
add_subdirectory(/home/....../dlib/dlib dlib_build)
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(face_detector dlib::dlib)
|
||||||
|
```
|
||||||
110
dlib/note/dlib系列笔记0:开发环境.md
Normal file
110
dlib/note/dlib系列笔记0:开发环境.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# dlib系列笔记0:开发环境
|
||||||
|
|
||||||
|
> ubuntu 16.04 python3.5 opencv3.4.0
|
||||||
|
|
||||||
|
## opencv3.4.0 安装编译
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
unzip opencv-3.4.0.zip
|
||||||
|
cd opencv
|
||||||
|
|
||||||
|
sudo apt install cmake
|
||||||
|
sudo apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
|
||||||
|
|
||||||
|
mkdir my_build
|
||||||
|
cd my_build
|
||||||
|
|
||||||
|
## cmake 中会下载安装一个大文件,网速会很慢
|
||||||
|
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
|
||||||
|
|
||||||
|
sudo make
|
||||||
|
sudo make install
|
||||||
|
|
||||||
|
sudo gedit /etc/ld.so.conf.d/opencv.conf
|
||||||
|
|
||||||
|
# add this
|
||||||
|
"
|
||||||
|
/usr/local/lib
|
||||||
|
"
|
||||||
|
|
||||||
|
sudo ldconfig
|
||||||
|
|
||||||
|
sudo gedit /etc/bash.bashrc
|
||||||
|
|
||||||
|
# add this
|
||||||
|
"
|
||||||
|
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
|
||||||
|
export PKG_CONFIG_PATH
|
||||||
|
"
|
||||||
|
|
||||||
|
source /etc/bash.bashrc
|
||||||
|
sudo updatedb
|
||||||
|
|
||||||
|
# test
|
||||||
|
|
||||||
|
cd opencv***/smaples/cpp/example_cmake
|
||||||
|
cmake .
|
||||||
|
make
|
||||||
|
./opencv_example
|
||||||
|
|
||||||
|
# and you will see yourself
|
||||||
|
# compete
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## dlib 安装编译
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
git clone https://github.com/davisking/dlib.git
|
||||||
|
|
||||||
|
cd dlib
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
|
||||||
|
cmake --build . --config Release
|
||||||
|
|
||||||
|
# 安装python包
|
||||||
|
cd ..
|
||||||
|
python3 setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA
|
||||||
|
```
|
||||||
|
|
||||||
|
## 编译opencv程序
|
||||||
|
|
||||||
|
- use g++
|
||||||
|
``` bash
|
||||||
|
g++ main.cpp `pkg-config opencv --cflags --libs`
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
- use cmake
|
||||||
|
|
||||||
|
> nano CMakeLists.txt
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
project(test)
|
||||||
|
find_package(OpenCV REQUIRED)
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(main ${OpenCV_LIBS})
|
||||||
|
```
|
||||||
|
|
||||||
|
## 编译 dlib 程序
|
||||||
|
|
||||||
|
- use g++
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
g++ -std=c++11 -O3 -I.. dlib_package_root/dlib/dlib/all/source.cpp -lpthread -lX11 example_program_name.cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
- use cmake
|
||||||
|
|
||||||
|
> nano CMakeLists.txt
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
project(test)
|
||||||
|
add_subdirectory(/home/....../dlib/dlib dlib_build)
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(face_detector dlib::dlib)
|
||||||
|
```
|
||||||
60
dlib/note/dlib系列笔记1:项目简介.md
Normal file
60
dlib/note/dlib系列笔记1:项目简介.md
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# dlib系列笔记1:项目简介
|
||||||
|
|
||||||
|
## 要完成的目标或功能
|
||||||
|
|
||||||
|
- 人脸检测
|
||||||
|
- 人脸特征提取
|
||||||
|
- 人脸识别
|
||||||
|
- 用摄像头实时完成以上三种功能
|
||||||
|
- 用python、cpp完成以上三种功能
|
||||||
|
- 移植到树莓派上
|
||||||
|
|
||||||
|
## 项目文件结构
|
||||||
|
|
||||||
|
> 项目地址: https://github.com/lightjiang/FaceRecognize.git
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
.
|
||||||
|
├── cpp_src # cpp 源码
|
||||||
|
│ ├── CMakeLists.txt
|
||||||
|
│ ├── face_detector.cpp
|
||||||
|
│ ├── mybase.hpp
|
||||||
|
│ └── video_tracker.cpp
|
||||||
|
├── data # 图片数据
|
||||||
|
│ ├── auto_download_img
|
||||||
|
│ ├── crowd
|
||||||
|
│ ├── frontal
|
||||||
|
│ ├── profile
|
||||||
|
│ └── star
|
||||||
|
├── model # 模型 下载链接见 http://dlib.net/files/
|
||||||
|
│ ├── dlib_face_recognition_resnet_model_v1.dat
|
||||||
|
│ ├── mmod_human_face_detector.dat
|
||||||
|
│ ├── shape_predictor_5_face_landmarks.dat
|
||||||
|
│ └── shape_predictor_68_face_landmarks.dat
|
||||||
|
├── results # 存储人脸识别数据结果
|
||||||
|
│ ├── known # 人脸图片
|
||||||
|
│ │ ├── fee26871-0f30-11e8-93de-a0c589189417.jpg
|
||||||
|
| | .....
|
||||||
|
│ │ └── fef129db-0da9-11e8-93de-a0c589189417.jpg
|
||||||
|
│ ├── known_faces # 存人脸数据,如名称,来源,图片保存路径
|
||||||
|
│ ├── known_vectors # 存人脸特征
|
||||||
|
│ └── vedio
|
||||||
|
├── script
|
||||||
|
│ ├── download_baidu_img.py
|
||||||
|
│ ├── download_star_img.py
|
||||||
|
│ ├── __init__.py
|
||||||
|
│ ├── reform_star_data.py
|
||||||
|
│ └── rename_img_in_dir.py
|
||||||
|
├── base.py
|
||||||
|
├── face_alignment.py
|
||||||
|
├── face_clustering.py
|
||||||
|
├── face_detector.py
|
||||||
|
├── face_features.py
|
||||||
|
├── face_recognition.py
|
||||||
|
├── face_recognize_in_vedio.py
|
||||||
|
├── settings.py
|
||||||
|
├── uming.ttc
|
||||||
|
├── utils.py
|
||||||
|
├── README.md
|
||||||
|
└── vedio_base.py
|
||||||
|
```
|
||||||
12
dlib/note/dlib系列笔记2:获取数据.md
Normal file
12
dlib/note/dlib系列笔记2:获取数据.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# dlib系列笔记2:获取数据
|
||||||
|
|
||||||
|
源码参考
|
||||||
|
``` bash
|
||||||
|
├── script
|
||||||
|
│ ├── download_baidu_img.py
|
||||||
|
│ ├── download_star_img.py
|
||||||
|
```
|
||||||
|
|
||||||
|
分别用两个脚本获取百度相关主题词图片和明星图库图片
|
||||||
|
|
||||||
|
注:检查文件保存路径等,先少量获取数据测试在完整运行
|
||||||
192
dlib/note/dlib系列笔记3:人脸检测.md
Normal file
192
dlib/note/dlib系列笔记3:人脸检测.md
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
# dlib系列笔记3:人脸检测
|
||||||
|
|
||||||
|
## 效果图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 源码
|
||||||
|
|
||||||
|
截取重要类的实现片段
|
||||||
|
具体源码参考 https://github.com/lightjiang/FaceRecognize.git
|
||||||
|
|
||||||
|
- base.py
|
||||||
|
|
||||||
|
``` python
|
||||||
|
class Base(object):
|
||||||
|
base_path = BASEPATH
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.img = None
|
||||||
|
self.img_path = ''
|
||||||
|
|
||||||
|
def load_img(self, path, relative=True, flags=cv2.IMREAD_COLOR):
|
||||||
|
# 自动从web加载图片
|
||||||
|
if path.startswith('http'):
|
||||||
|
path = self.download_web_img(path)
|
||||||
|
|
||||||
|
img_path = path
|
||||||
|
if relative:
|
||||||
|
path = os.path.join(self.base_path, path)
|
||||||
|
if os.path.exists(path):
|
||||||
|
res = cv2.imread(path, flags=flags)
|
||||||
|
# 转换图片通道, opencv默认bgr格式,dlib需要rgb格式
|
||||||
|
self.img = cv2.cvtColor(res, cv2.COLOR_BGR2RGB)
|
||||||
|
self.img_path = img_path
|
||||||
|
return self.img
|
||||||
|
else:
|
||||||
|
raise FileNotFoundError(path)
|
||||||
|
|
||||||
|
def download_web_img(self, url):
|
||||||
|
path = 'data/auto_download_img/%s.jpg' % uuid.uuid1()
|
||||||
|
# 复制的百度图片链接有时会下载异常
|
||||||
|
request.urlretrieve(url, path)
|
||||||
|
print('download complete')
|
||||||
|
return path
|
||||||
|
|
||||||
|
def save_img(self, img, path, relative=True):
|
||||||
|
if relative:
|
||||||
|
path = os.path.join(self.base_path, path)
|
||||||
|
cv2.imwrite(path, cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
|
||||||
|
|
||||||
|
def add_marks(self, pos, color=None):
|
||||||
|
# 在self.img 上添加标记
|
||||||
|
if isinstance(pos, tuple):
|
||||||
|
pos = [pos]
|
||||||
|
elif isinstance(pos, list):
|
||||||
|
pos = pos
|
||||||
|
else:
|
||||||
|
raise AttributeError
|
||||||
|
|
||||||
|
if not color:
|
||||||
|
color = (0, 255, 0)
|
||||||
|
for p in pos:
|
||||||
|
cv2.circle(self.img, p, 2, color, 1)
|
||||||
|
|
||||||
|
def add_faces(self, faces, show_score=True, color=None, add_text=None):
|
||||||
|
# 在self.img 上添加脸部识别框
|
||||||
|
if isinstance(faces, dict):
|
||||||
|
faces = [faces]
|
||||||
|
elif isinstance(faces, list):
|
||||||
|
faces = faces
|
||||||
|
else:
|
||||||
|
raise AttributeError
|
||||||
|
for face in faces:
|
||||||
|
rect = face['position']
|
||||||
|
if not color:
|
||||||
|
color = (255, 0, 0)
|
||||||
|
cv2.rectangle(self.img, (rect.left(), rect.top()), (rect.right(), rect.bottom()), color, 3)
|
||||||
|
if show_score and 'score' in face:
|
||||||
|
score = face['score']
|
||||||
|
width = rect.right() - rect.left()
|
||||||
|
cv2.putText(self.img, str(round(score, 3)), (rect.left() + 10, rect.bottom() - 10), cv2.FONT_HERSHEY_SIMPLEX, width/120,
|
||||||
|
(255, 255, 255), 1)
|
||||||
|
if add_text:
|
||||||
|
width = rect.right() - rect.left()
|
||||||
|
cv2.putText(self.img, str(add_text), (rect.left() + 10, rect.bottom() - 10),
|
||||||
|
cv2.FONT_HERSHEY_SIMPLEX, width / 120,
|
||||||
|
(255, 255, 255), 1)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- face_detector.py
|
||||||
|
|
||||||
|
``` python
|
||||||
|
class FaceDetector(Base):
|
||||||
|
"""
|
||||||
|
based on HOG
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
self.face_detector = dlib.get_frontal_face_detector()
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def detect_face(self, log_status=True):
|
||||||
|
if self.img is None:
|
||||||
|
raise AttributeError('please load img before detect')
|
||||||
|
t = time.time()
|
||||||
|
dets, scores, idx = self.face_detector.run(self.img, 1, -1)
|
||||||
|
res = []
|
||||||
|
for index, face in enumerate(dets):
|
||||||
|
temp = {
|
||||||
|
'id': str(uuid.uuid1()),
|
||||||
|
'position': face,
|
||||||
|
'score': scores[index],
|
||||||
|
'src': self.img_path
|
||||||
|
}
|
||||||
|
if scores[index] > 0:
|
||||||
|
res.append(temp)
|
||||||
|
if log_status:
|
||||||
|
print("Detecting faces takes: {}s\nNumber of faces detected: {}".format(time.time() - t, len(res)))
|
||||||
|
return res
|
||||||
|
|
||||||
|
def detect_faces_from_imgs(self, imgs: list):
|
||||||
|
t = time.time()
|
||||||
|
res = []
|
||||||
|
for img_path in imgs:
|
||||||
|
self.load_img(img_path)
|
||||||
|
res += self.detect_face(log_status=False)
|
||||||
|
self.img = None
|
||||||
|
print("Detecting faces takes: {}s\nNumber of faces detected: {}".format(time.time() - t, len(res)))
|
||||||
|
return res
|
||||||
|
```
|
||||||
|
|
||||||
|
- cpp_src/face_detector.cpp
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
#include <dlib/image_processing/frontal_face_detector.h>
|
||||||
|
#include <dlib/gui_widgets.h>
|
||||||
|
#include <dlib/image_io.h>
|
||||||
|
#include <dlib/opencv.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
#include <opencv2/imgcodecs.hpp>
|
||||||
|
#include <opencv2/imgproc.hpp>
|
||||||
|
#include <opencv2/highgui.hpp>
|
||||||
|
#include "mybase.hpp"
|
||||||
|
|
||||||
|
using namespace dlib;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
cout << "Give some image files as arguments to this program." << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
frontal_face_detector detector = get_frontal_face_detector();
|
||||||
|
|
||||||
|
// Loop over all the images provided on the command line.
|
||||||
|
for (int i = 1; i < argc; ++i)
|
||||||
|
{
|
||||||
|
cout << "processing image " << argv[i] << endl;
|
||||||
|
cv::Mat image;
|
||||||
|
image = cv::imread(argv[i], cv::IMREAD_COLOR);
|
||||||
|
dlib::cv_image<rgb_pixel> img(image);
|
||||||
|
std::vector<rectangle> dets = detector(img);
|
||||||
|
cout << "Number of faces detected: " << dets.size() << dets[0].left() <<dets[1] << image.size() << endl<< image;
|
||||||
|
for (auto temp_point: dets){
|
||||||
|
cout << temp_point<< temp_point.left() <<endl;
|
||||||
|
mark_face(image, temp_point);
|
||||||
|
// cv::rectangle(image, cv::Point(temp_point.left(), temp_point.top()), cv::Point(temp_point.right(), temp_point.bottom()),cv::Scalar(255,0,0),1,1,0);
|
||||||
|
}
|
||||||
|
// cv::rectangle(image, cv::Point(dets[0][0][0], dets[0][0][1]));
|
||||||
|
cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE); // Create a window for display.
|
||||||
|
cv::imshow("Display window", image); // Show our image inside it.
|
||||||
|
cv::waitKey(0); // Wait for a keystroke in the window
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (exception &e)
|
||||||
|
{
|
||||||
|
cout << "\nexception thrown!" << endl;
|
||||||
|
cout << e.what() << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
0
dlib/note/dlib系列笔记4:人脸校正.md
Normal file
0
dlib/note/dlib系列笔记4:人脸校正.md
Normal file
0
dlib/note/dlib系列笔记5:人脸特征提取.md
Normal file
0
dlib/note/dlib系列笔记5:人脸特征提取.md
Normal file
0
dlib/note/dlib系列笔记6:人脸聚类.md
Normal file
0
dlib/note/dlib系列笔记6:人脸聚类.md
Normal file
1
dlib/note/dlib系列笔记7:人脸识别.md
Normal file
1
dlib/note/dlib系列笔记7:人脸识别.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# dlib系列笔记6:人脸识别
|
||||||
1
dlib/note/dlib系列笔记8:实时人脸识别和人脸追踪.md
Normal file
1
dlib/note/dlib系列笔记8:实时人脸识别和人脸追踪.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# dlib系列笔记7:实时人脸识别和人脸追踪
|
||||||
@ -32,8 +32,3 @@ sudo systemctl daemon-reload
|
|||||||
sudo systemctl restart docker
|
sudo systemctl restart docker
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
``` bash
|
|
||||||
|
|
||||||
docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:3.2
|
|
||||||
```
|
|
||||||
8
mongodb/install.md
Normal file
8
mongodb/install.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# mongodb 安装使用
|
||||||
|
|
||||||
|
## docker
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
docker pull mongo
|
||||||
|
docker run -p 27017:27017 -v /data/db:/data/db -d mongo:3.2
|
||||||
|
```
|
||||||
19
opencv/compile.md
Normal file
19
opencv/compile.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# 编译opencv程序
|
||||||
|
|
||||||
|
## use g++
|
||||||
|
``` bash
|
||||||
|
g++ main.cpp `pkg-config opencv --cflags --libs`
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## use cmake
|
||||||
|
|
||||||
|
> nano CMakeLists.txt
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
project(test)
|
||||||
|
find_package(OpenCV REQUIRED)
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(main ${OpenCV_LIBS})
|
||||||
|
```
|
||||||
119
opencv/install.md
Normal file
119
opencv/install.md
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
# opencv 环境部署指南
|
||||||
|
|
||||||
|
> http://blog.csdn.net/cocoaqin/article/details/78163171
|
||||||
|
|
||||||
|
> http://blog.csdn.net/eds95/article/details/78870194
|
||||||
|
|
||||||
|
|
||||||
|
## ubuntu
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
unzip opencv-3.4.0.zip
|
||||||
|
cd opencv
|
||||||
|
|
||||||
|
sudo apt install cmake
|
||||||
|
sudo apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
|
||||||
|
|
||||||
|
mkdir my_build
|
||||||
|
cd my_build
|
||||||
|
|
||||||
|
## cmake 中会下载安装一个大文件,网速会很慢
|
||||||
|
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
|
||||||
|
|
||||||
|
sudo make
|
||||||
|
sudo make install
|
||||||
|
|
||||||
|
sudo gedit /etc/ld.so.conf.d/opencv.conf
|
||||||
|
|
||||||
|
# add this
|
||||||
|
"
|
||||||
|
/usr/local/lib
|
||||||
|
"
|
||||||
|
|
||||||
|
sudo ldconfig
|
||||||
|
|
||||||
|
sudo gedit /etc/bash.bashrc
|
||||||
|
|
||||||
|
# add this
|
||||||
|
"
|
||||||
|
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
|
||||||
|
export PKG_CONFIG_PATH
|
||||||
|
"
|
||||||
|
|
||||||
|
source /etc/bash.bashrc
|
||||||
|
sudo updatedb
|
||||||
|
|
||||||
|
# test
|
||||||
|
|
||||||
|
cd opencv***/smaples/cpp/example_cmake
|
||||||
|
cmake .
|
||||||
|
make
|
||||||
|
./opencv_example
|
||||||
|
|
||||||
|
# and you will see yourself
|
||||||
|
# compete
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## raspberry
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo apt update
|
||||||
|
sudo apt upgrade
|
||||||
|
|
||||||
|
sudo rpi-update
|
||||||
|
sudo reboot
|
||||||
|
|
||||||
|
# 图像io库
|
||||||
|
sudo apt install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
|
||||||
|
|
||||||
|
# 视频处理库
|
||||||
|
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
|
||||||
|
sudo apt install libxvidcore-dev libx264-dev
|
||||||
|
|
||||||
|
# 安装gtk, 用于opencv gui显示
|
||||||
|
sudo apt install libgtk2.0-dev
|
||||||
|
|
||||||
|
|
||||||
|
sudo apt install libatlas-base-dev gfortran
|
||||||
|
|
||||||
|
|
||||||
|
# 安装python 环境
|
||||||
|
sudo apt-get install python2.7-dev python3-dev
|
||||||
|
sudo apt-get install build-essential libssl-dev libevent-dev libjpeg-dev libxml2-dev libxslt-dev
|
||||||
|
|
||||||
|
unzip ....
|
||||||
|
|
||||||
|
cd opencv
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
# warning change your path
|
||||||
|
cmake -D CMAKE_BUILD_TYPE=RELEASE \
|
||||||
|
-D CMAKE_INSTALL_PREFIX=/usr/local \
|
||||||
|
-D OPENCV_EXTRA_MODULES_PATH=/program/opencv_contrib-3.3.0/modules \
|
||||||
|
-D ENABLE_NEON=ON \
|
||||||
|
-D ENABLE_VFPV3=ON \
|
||||||
|
-D BUILD_TESTS=OFF \
|
||||||
|
-D INSTALL_PYTHON_EXAMPLES=OFF \
|
||||||
|
-D BUILD_EXAMPLES=OFF ..
|
||||||
|
|
||||||
|
# 修改swap空间大小
|
||||||
|
vi /etc/dphys-swapfile
|
||||||
|
# 找到CONF_SWAPSIZE=100改为1024
|
||||||
|
# set size to absolute value, leaving empty (default) then uses computed value
|
||||||
|
# you most likely don't want this, unless you have an special disk situation
|
||||||
|
CONF_SWAPSIZE=1024
|
||||||
|
|
||||||
|
sudo /etc/init.d/dphys-swapfile stop
|
||||||
|
sudo /etc/init.d/dphys-swapfile start
|
||||||
|
|
||||||
|
make -j4
|
||||||
|
sudo make install
|
||||||
|
sudo ldconfig
|
||||||
|
|
||||||
|
|
||||||
|
xhost +
|
||||||
|
export DISPLAY=:0.0
|
||||||
|
|
||||||
|
```
|
||||||
55
opencv/make_a_video.md
Normal file
55
opencv/make_a_video.md
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# 利用opencv录制视频
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
#include <opencv2/core.hpp>
|
||||||
|
#include <opencv2/imgcodecs.hpp>
|
||||||
|
#include <opencv2/highgui.hpp>
|
||||||
|
#include <opencv2/imgproc.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace cv;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main( )
|
||||||
|
{
|
||||||
|
VideoCapture capture(0);//如果是笔记本,0打开的是自带的摄像头,1 打开外接的相机
|
||||||
|
Mat img;
|
||||||
|
VideoWriter vw; //新建一个多媒体文件
|
||||||
|
namedWindow( "cam" );
|
||||||
|
|
||||||
|
int fps = capture.get(CAP_PROP_FPS ); //获取摄像头的帧率
|
||||||
|
cout << capture.get( CAP_PROP_FRAME_WIDTH )<<capture.get( CAP_PROP_FRAME_HEIGHT )<<fps<<endl;
|
||||||
|
if(fps <= 0 )fps = 25;
|
||||||
|
//设置视频的格式
|
||||||
|
vw.open( "out.avi", VideoWriter::fourcc( 'x', '2', '6', '4' ), fps, Size( capture.get( CAP_PROP_FRAME_WIDTH ), capture.get( CAP_PROP_FRAME_HEIGHT ) ) );
|
||||||
|
|
||||||
|
if(!capture.isOpened( )) //判断摄像头是否打开
|
||||||
|
{
|
||||||
|
cout << "open video faild";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cout << "open video success" << endl;
|
||||||
|
|
||||||
|
if(!vw.isOpened()) //判断视频文件是否创建
|
||||||
|
{
|
||||||
|
cout << "open vw faild"<< endl;
|
||||||
|
}
|
||||||
|
cout << "open vw success" << endl;
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
capture.read( img); //读取视频帧
|
||||||
|
if(img.empty( ))
|
||||||
|
break;
|
||||||
|
imshow("cam", img ); //显示视频帧
|
||||||
|
vw.write( img ); //将视频帧写入文件
|
||||||
|
|
||||||
|
if(waitKey( 10 ) == 'q') //q键退出录制
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
Loading…
x
Reference in New Issue
Block a user