opencv辅助工具
rakali的Python项目详细描述
Rakali(0.0.11版)
rakali是一个图像库和摄像机工具集。它提供了许多 帮助校准单声道和立体声摄影机装备的摄影机基本体,图像 处理和目标检测它还包括一些预构建的工具 帮帮忙。
Rakali利用了许多其他的图像库和框架 作为他们的教学资源。
以澳大利亚水獭hydromys chrysogaster命名
提供的工具
rakali提供了许多工具来帮助使用mono和立体声 摄像机
Tool | Purpose |
---|---|
rakali-find-ipcameras | Discover IP cameras on the local LAN |
rakali-view | View live video stream |
rakali-view-stereo | View live stereo video stream |
rakali-find-chessboards | Find calibration images in live video feed |
rakali-find-chessboards-stereo | Find calibration images in live stereo video feed |
rakali-calibrate-pinhole | Calibrate a standard lens camera |
rakali-calibrate-fisheye | Calibrate a fish-eyed lens camera |
rakali-calibrate-fisheye-stereo | Calibrate a fish-eyed stereo rig |
rakali-undistort-pinhole | Correct standard lens camera live video feed |
rakali-undistort-fisheye | Correct fish-eye camera live video feed |
rakali-undistort-fisheye-image | Correct image provided by calibrated fish-eye camera |
rakali-split-stereo-feed | Split recorded stereo view feeds into left and right eye views |
rakali | Image processing library examplar |
rakali查找ipcameras
按供应商和服务扫描本地局域网中的IP摄像机
$ rakali-find-ipcameras cams
Usage: rakali-find-ipcameras [OPTIONS] COMMAND [ARGS]...
Discover IP cameras on local LAN
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
cams Discover local IP cameras using vendor name
service Scanning for video feed services
扫描摄像机,Do:^ {CD1>},默认值是搜索轴模型。
它提供了一个已发现的nvr或类似这样的摄像机的列表:
Scanning 10.41.212.0/24 for axis cameras or NVRs
['10.41.212.135', '10.41.212.147']
Rakali视图
查看来自IP和USB摄像头的实时视频源IP摄像头和NVR
可以使用
rakali-find-ipcameras
。
$ rakali-view --help
Usage: rakali-view [OPTIONS]
Options:
--version Show the version and exit.
-s, --source TEXT Video source, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default: http://axis-
lab/axis-cgi/mjpg/video.cgi?&camera=2]
--help Show this message and exit.
一个简单的单流视频播放器
Rakali查找棋盘
在视频源中查找棋盘图像以进行校准。
rakali-find-chessboards
将在帧流中查找棋盘模式
并保存每个包含棋盘的帧,以便在相机期间进行批处理
校准。
$ rakali-find-chessboards --help
Usage: rakali-find-chessboards [OPTIONS] Test each frame in the stream for the presence of a chess-board pattern. If found, save to the output folder Options: --version Show the version and exit. -s, --source TEXT Video source, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default: http://axis-lab/axis-cgi/mjpg/video.cgi?&camera=1] -o, --output-folder TEXT Output folder for images containing a chessboard [default: ~/rakali/chessboards/] --chessboard-rows INTEGER Chessboard rows [default: 9] --chessboard-columns INTEGER Chessboard columns [default: 6] --help Show this message and exit.
该过程将在目标文件夹中放置校准帧,如下所示:
$ tree ~/rakali/chessboards
/home/thys/rakali/chessboards
├── 00000.jpg
├── 00001.jpg
├── 00002.jpg
├── 00003.jpg
拉卡利发现棋盘立体声
在立体声视频源中查找棋盘图像以进行校准。它
以与rakali-find-chessboards
相同的方式操作,但会生成
框架
rakali-find-chessboards-stereo --help
Usage: rakali-find-chessboards-stereo [OPTIONS]
Find chessboard calibration images in both frames of the stereo pair
Options:
--version Show the version and exit.
-l, --left-eye TEXT Left eye, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default:
http://axis-lab/axis-cgi/mjpg/video.cgi?&camera=1]
-r, --right-eye TEXT Right eye, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default:
http://axis-lab/axis-cgi/mjpg/video.cgi?&camera=2]
-o, --output-folder TEXT Fetch image from URL [default: ~/rakali/stereo/chessboards/]
--chessboard-rows INTEGER Chessboard rows [default: 9]
--chessboard-columns INTEGER Chessboard columns [default: 6]
--help Show this message and exit.
$ tree ~/rakali/stereo/chessboards /home/thys/rakali/stereo/chessboards ├── left_00000.jpg ├── left_00001.jpg ├── left_00002.jpg ├── right_00000.jpg ├── right_00001.jpg ├── right_00002.jpg
Rakali校准针孔
用针孔镜头校准摄像机
$ rakali-calibrate-pinhole --help
Usage: rakali-calibrate-pinhole [OPTIONS]
Calibrate pinhole camera using chessboard frames captured earlier.
Options:
--version Show the version and exit.
-i, --input-folder TEXT Folder where chessboard images are stored [default: ~/rakali/chessboards/]
--image-points-file TEXT Corner points data [default: image_points.npz]
--calibration-file TEXT Camera calibration data [default: pinhole_calibration.npz]
--chessboard-rows INTEGER Chessboard rows [default: 9]
--chessboard-columns INTEGER Chessboard columns [default: 6]
--square-size FLOAT Chessboard square size in m [default: 0.023]
--salt INTEGER Seed value for random picking of calibration images from a large set [default: 888]
--pick-size INTEGER Size of image set to use for calibration, picked from available set [default: 50]
--help Show this message and exit.
Rakali校准鱼眼
用棋盘校准鱼眼镜头校准摄像机
使用rakali-find-chessboards
捕获的图像。
$ rakali-calibrate-fisheye --help
Usage: rakali-calibrate-fisheye [OPTIONS]
Calibrate fish-eye camera using chessboard frames captured earlier.
Options:
--version Show the version and exit.
-i, --input-folder TEXT Folder where chessboard images are stored [default: ~/rakali/chessboards/]
--image-points-file TEXT Corner points data [default: image_points.npz]
--calibration-file TEXT Camera calibration data [default: fisheye_calibration.npz]
--chessboard-rows INTEGER Chessboard rows [default: 9]
--chessboard-columns INTEGER Chessboard columns [default: 6]
--square-size FLOAT Chessboard square size in m [default: 0.023]
--salt INTEGER Seed value for random picking of calibration images from a large set [default: 888]
--pick-size INTEGER Size of image set to use for calibration, picked from available set [default: 50]
--cid TEXT Calibration ID to associate a calibration file with a device [default: fisheye]
--help Show this message and exit.
正在执行$ rakali-calibrate-fisheye
结果:
$ rakali-calibrate-fisheye
Loading previously computed image points from image_points.npz
Calibrating on 50 objects...
INFO:rakali.camera.fisheye:Saving fisheye calibration data to fisheye_calibration.npz
DIM=(1920, 1080)
K=np.array([[558.6421513930135, 0.0, 977.0871045041308], [0.0, 559.5579191046008, 493.7827965652395], [0.0, 0.0, 1.0]])
D=np.array([[-0.018316232894576033], [0.002931049514785237], [-0.0022823146847841804], [0.00014813140230995043]])
Calibration error: 0.8771782112164381
生成的校准文件包含k和d矩阵以及一些元数据
{"D":[[-0.018316232894576033],[0.002931049514785237],[-0.0022823146847841804],[0.00014813140230995043]],"K":[[558.6421513930135,0.0,977.0871045041308],[0.0,559.5579191046008,493.7827965652395],[0.0,0.0,1.0]],"cid":"fisheye","error":0.8771782112164381,"image_size":[1920,1080],"pick_size":50,"salt":888,"time":1553647761.7596939}
rakali校准鱼眼立体声
rakali-calibrate-fisheye-stereo
使用一组固定的先前捕获的棋盘图像来校准
鱼眼立体摄像设备。计算出的参数保存在校准文件中,以便在图像中使用
整改。
$ rakali-calibrate-fisheye-stereo --help
Usage: rakali-calibrate-fisheye-stereo [OPTIONS] Calibrate fish-eye stereo camera rig using chessboard frames captured earlier. Options: --version Show the version and exit. -i, --input-folder TEXT Folder where chessboard images are stored [default: ~/rakali/stereo/chessboards/] --left-image-points-file TEXT Left Corner points data [default: left_image_points.json] --right-image-points-file TEXT Right Corner points data [default: right_image_points.json] --calibration-file TEXT Stereo Camera calibration data [default: fisheye_stereo_calibration.json] --chessboard-rows INTEGER Chessboard rows [default: 9] --chessboard-columns INTEGER Chessboard columns [default: 6] --square-size FLOAT Chessboard square size in m [default: 0.023] --salt INTEGER Seed value for random picking of calibration images from a large set[default: 888] --pick-size INTEGER Size of image set to use for calibration, picked from available set[default: 50] --cid TEXT Calibration ID to associate a calibration file with a device [default: fisheye] --prefilter / --no-prefilter Prefilter images [default: True] --help Show this message and exit.
.... Image /home/thys/rakali/stereo/chessboards/left_00088.jpg OK Image /home/thys/rakali/stereo/chessboards/left_00058.jpg OK Image /home/thys/rakali/stereo/chessboards/right_00238.jpg OK Image /home/thys/rakali/stereo/chessboards/left_00122.jpg OK Loading previously computed image points from left_image_points.json Calibrating on 50 objects... Loading previously computed image points from right_image_points.json Calibrating on 50 objects... Calibrate Fisheye Stereo camera using pre-calibrated values DIM=(1920, 1080) left calibration K=np.array([[552.7233750094179, 0.0, 948.2959591699556], [0.0, 554.6925141069631, 548.3575557665413], [0.0, 0.0, 1.0]])D=np.array([[-0.05136306776237411], [0.0959513318929465], [-0.09081590588179426], [0.028414418435600244]]) Calibration error: 0.5128009096414867 right calibration K=np.array([[552.7233750094177, 0.0, 948.2959591699567], [0.0, 554.6925141069636, 548.3575557665405], [0.0, 0.0, 1.0]])D=np.array([[-0.051363067762376646], [0.09595133189294996], [-0.09081590588179408], [0.028414418435599085]]) Calibration error: 0.46991635076102695
rakali不变形针孔
来自校准的标准针孔照相机的正确视频馈送
$ rakali-undistort-pinhole --help
Usage: rakali-undistort-pinhole [OPTIONS]
Undistort live feed from pinhole model type camera
Options:
--version Show the version and exit.
-s, --source TEXT Video source, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default:
http://axis-lab/axis-cgi/mjpg/video.cgi?&camera=1]
--calibration-file TEXT Camera calibration data [default: pinhole_calibration.npz]
--help Show this message and exit.
Rakali不受干扰鱼眼
来自校准鱼眼镜头相机的正确视频源
$ rakali-undistort-fisheye --help
Usage: rakali-undistort-fisheye [OPTIONS]
Undistort live video feed from fish-eye lens camera
Options:
--version Show the version and exit.
-s, --source TEXT Video source, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default:
http://axis-lab/axis-cgi/mjpg/video.cgi?&camera=1]
--calibration-file PATH Camera calibration data [default: fisheye_calibration.npz]
-b, --balance FLOAT Balance value 0.0 ~30% pixel loss, 1.0 no loss [default: 1.0]
--help Show this message and exit.
$ rakali-undistort-fisheye
$ rakali-undistort-fisheye -b 0.5
$ rakali-undistort-fisheye -b 0
Rakali无失真鱼眼图像
$ rakali-undistort-fisheye-image --help
Usage: rakali-undistort-fisheye-image [OPTIONS] IMAGE_PATH Rectify a image taken with a fish-eye lens camera using calibration parameters Options: --version Show the version and exit. --calibration-file PATH Camera calibration data [default: fisheye_calibration.json; required] -b, --balance FLOAT Balance value 0.0 ~30% pixel loss, 1.0 no loss [default: 1.0] -s, --scale FLOAT Scale image [default: 0.5] --help Show this message and exit.
$ rakali-undistort-fisheye-image ~/rakali/chessboards/00000.jpg
Rakali View立体声
从立体摄影机装备中查看实时源
$ rakali-view-stereo --help
Usage: rakali-view-stereo [OPTIONS]
Options:
--version Show the version and exit.
-l, --left-eye TEXT Left eye, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default: http://axis-
lab/axis-cgi/mjpg/video.cgi?&camera=1]
-r, --right-eye TEXT Right eye, can be local USB cam (0|1|2..) or IP cam rtsp URL or file [default: http://axis-
lab/axis-cgi/mjpg/video.cgi?&camera=2]
--help Show this message and exit.
Rakali分割立体声馈送
将源立体声录制拆分为左右摄像机视图
$ rakali-split-stereo-feed --help
Usage: rakali-split-stereo-feed [OPTIONS]
Split source stereo recording into left and right camera views
Options:
--version Show the version and exit.
-s, --source TEXT Stereo video source file to split [default: in.avi]
-l, --left-name TEXT Left camera video name [default: left_eye_out.avi]
-r, --right-name TEXT Right camera video name [default: right_eye_out.avi]
--fps FLOAT Frames per second rate for output file [default: 12.5]
--help Show this message and exit.
拉卡利
rakali附带了一个小的演示应用程序,用于练习库图像处理 功能。
$ rakali --help Usage: rakali [OPTIONS] COMMAND [ARGS]... Rakali image tools Provide either a input file or a input URL for image source Options: --version Show the version and exit. -i, --input-file PATH Use file -u, --input-url TEXT Fetch image from URL -o, --output-file PATH Output file [default: out.jpg] --help Show this message and exit. Commands: resize Resize the input image preserving aspect ratio, favoring width rotate Rotate the input image rotate-bounded Rotate the input image, keeping bound in place skeletonize Skeletonize the input image
库使用
库文档生成是一项正在进行的工作…
从文件加载并显示图像
from rakali import Image Image.from_file('rakali.jpg').show()
加载、注释和显示图像
#! /usr/bin/env python from rakali import Image img: Image= Image.from_file('rakali.jpg') img.add_text(labels=['Rakali', 'Hydromys chrysogaster']) img.show() img.write('rakali-text.jpg')
精明的
#! /usr/bin/env python"""Cannyfy Live USB video stream""" from rakali import VideoPlayer, VideoStream, VideoWriter from rakali.video.fps import cost from rakali.video import go from rakali.annotate import add_frame_labels, colors import imutils import logging logging.basicConfig(level=logging.DEBUG) @cost def canny(mat): img= imutils.auto_canny(image=mat, sigma=0.3)img= add_frame_labels(frame=img, labels=[f'canny cost: {canny.cost:6.3f}ms'], color=colors.get('WHITE'), )return img stream= VideoStream(src=0)player= VideoPlayer()writer= VideoWriter(size=stream.get_wh_size(), file_name='canny.avi') with stream, player, writer: while go(): frame= canny(stream.read()) writer.write(frame) player.show(frame)
安装
rakali本质上是一个opencv垫片。因为Rakali的某些部分依赖于OpenCV CUDA的可用性这个 pypi上的“python opencv”lib未标记为依赖项。你需要自己安装,或者使用 你自己预先编译的opencv cuda。Arch Linux在AUR中有opencv cuda,因此请安装:
$ yay -S opencv-cuda
在安装时,还应安装tensorflow-opt-cuda
:
# pacman -S tensorflow-opt-cuda
PYPI
拉卡利在皮皮:
$ pip install rakali
手动安装
克隆或下载此repo并在您的virtualenv中执行以下操作:
$ pip install .