From 8c9acc98fb3b9b75849be26fbab6f2773936a7ce Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 26 Apr 2018 00:09:12 +0300 Subject: [PATCH] docs: qr example --- docs/camera.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/docs/camera.md b/docs/camera.md index 52df5d7b..020a60d2 100644 --- a/docs/camera.md +++ b/docs/camera.md @@ -57,3 +57,55 @@ image_pub.publish(bridge.cv2_to_imgmsg(cv_image, 'bgr8')) ``` Получаемые изображения можно просматривать используя [web_video_server](web_video_server.md). + +### Примеры + +#### Работа с QR-кодами + +> **Hint** Для высокоскоростного распознавания и позиционирования лучше использовать [ArUco-маркеры](aruco.md). + +Для программирования различных действий коптера при детектировании нужных [QR-кодов](https://ru.wikipedia.org/wiki/QR-код) можно использовать бибилиотеку [ZBar](http://zbar.sourceforge.net). Ее нужно установить в помощью pip: + +```bash +sudo pip install zbar +``` + +Распознавание QR-кодов на Python: + +```python +import cv2 +import zbar +from cv_bridge import CvBridge +from sensor_msgs.msg import Image + +bridge = CvBridge() +scanner = zbar.ImageScanner() +scanner.parse_config('enable') + +# Image subscriber callback function +def image_callback(data): + cv_image = bridge.imgmsg_to_cv2(data, 'bgr8') # OpenCV image + gray = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY, dstCn=0) + + pil = ImageZ.fromarray(gray) + raw = pil.tobytes() + + image = zbar.Image(320, 240, 'Y800', raw) # Image params + scanner.scan(image) + + for symbol in image: + # print detected QR code + print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data + + +image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_callback, queue_size=1) +``` + +Скрипт будет занимать 100% процессора. Для искусственного замедления работы скрипта, можно запустить [throttling](http://wiki.ros.org/topic_tools/throttle) кадров с камеры, например, в 5 Гц (`main_camera.launch`): + +```xml + +``` + +Топик для подписчика, в этом случае, необходимо поменять на `main_camera/image_raw/throttled`.