diff --git a/docs/ru/camera.md b/docs/ru/camera.md index 782c67f2..33eff926 100644 --- a/docs/ru/camera.md +++ b/docs/ru/camera.md @@ -98,40 +98,39 @@ image_pub.publish(bridge.cv2_to_imgmsg(cv_image, 'bgr8')) > **Hint** Для высокоскоростного распознавания и позиционирования лучше использовать [ArUco-маркеры](aruco.md). -Для программирования различных действий коптера при детектировании нужных [QR-кодов](https://ru.wikipedia.org/wiki/QR-код) можно использовать библиотеку [ZBar](http://zbar.sourceforge.net). Ее нужно установить в помощью pip: +Для программирования различных действий коптера при детектировании нужных [QR-кодов](https://ru.wikipedia.org/wiki/QR-код) можно использовать библиотеку [pyZBar](https://pypi.org/project/pyzbar/). Ее нужно установить в помощью pip: ```bash -sudo pip install zbar +sudo pip install pyzbar ``` Распознавание QR-кодов на Python: ```python -import cv2 -import zbar +import rospy +from pyzbar import pyzbar from cv_bridge import CvBridge from sensor_msgs.msg import Image bridge = CvBridge() -scanner = zbar.ImageScanner() -scanner.parse_config('enable') + +rospy.init_node('barcode_test') # 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 + barcodes = pyzbar.decode(cv_image) + for barcode in barcodes: + bData = barcode.data.encode("utf-8") + bType = barcode.type + (x, y, w, h) = barcode.rect + xc = x + w/2 + yc = y + h/2 + print ("Found barcode type {} with data {} with center at x={}, y={}".format(bType, bData, xc, yc)) image_sub = rospy.Subscriber('main_camera/image_raw', Image, image_callback, queue_size=1) + +rospy.spin() ``` Скрипт будет занимать 100% процессора. Для искусственного замедления работы скрипта можно запустить [throttling](http://wiki.ros.org/topic_tools/throttle) кадров с камеры, например, в 5 Гц (`main_camera.launch`):