opencvを用いたプログラムのエラーについて

700 views
Skip to first unread message

Kyaiktiyo

unread,
Oct 25, 2016, 7:26:44 AM10/25/16
to ROS JAPAN Users Group
ROS初心者です。
以下のようなopencvを用いたプログラム(color_vel.py)を作成しました。
※青色の物を検知したら前進、赤い物を検知したら後退するプログラムです。


#!/usr/bin/env python

import rospy
import cv2
import numpy as np
from sensor_msgs.msg import Image
from geometry_msgs.msg import Twist
from cv_bridge import CvBridge, CvBridgeError

class ColorExtract(object):
    def __init__(self):
        self._vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1)
        self._blue_pub = rospy.Publisher('blue_image', Image, queue_size=1)
        self._red_pub = rospy.Publisher('red_image', Image, queue_size=1)
        self._image_sub = rospy.Subscriber('/usb_cam/image_raw', Image, self.callback)
        self._bridge = CvBridge()
        self._vel = Twist()

    def get_colored_area(self, cv_image, lower, upper):
        hsv_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV)
        mask_image = cv2.inRange(hsv_image, lower, upper)
        extracted_image = cv2.bitwise_and(cv_image, cv_image, mask=mask_image)
        area = cv2.countNonZero(mask_image)
        return (area, extracted_image)
       
    def callback(self, data):
        try:
            cv_image = self._bridge.imgmsg_to_cv2(data, 'bgr8')
        except CvBridgeError, e:
            print e
        blue_area, blue_image = self.get_colored_area(
            cv_image, np.array([50,100,100]), np.array([150,255,255]))
        red_area, red_image = self.get_colored_area(
            cv_image, np.array([150,100,150]), np.array([180,255,255]))
           
        try:
            self._blue_pub.publish(self._bridge.cv2_to_imgmsg(blue_image, 'bgr8'))
            self._red_pub.publish(self._bridge.cv2_to_imgmsg(red_image, 'bgr8'))
        except CvBridgeError, e:
            print e
        rospy.loginfo('blue=%d, red=%d' % (blue_area, red_area))
        if blue_area > 1000:
            self._vel.linear.x = 0.5
            self._vel_pub.publish(self._vel)
        if red_area > 1000:
            self._vel.linear.x = -0.5
            self._vel_pub.publish(self._vel)


if __name__ == '__main__':
    rospy.init_node('color_extract')
    color = ColorExtract()
    try:
        rospy.spin()
    except KeyboardInterrupt:
        pass



しかし、以下のように実行した際に以下のようなエラーが発生しました。
ubuntu@raspberrypi:~/catkin_ws/src/cvTest$ python color_vel.py cmd_vel:=/mobile_base/commands/velocity
Traceback (most recent call last):
  File "color_vel.py", line 8, in <module>
    from cv_bridge import CvBridge, CvBridgeError
ImportError: No module named cv_bridge


この場合、どのように対処するべきなのでしょうか?
何かご不明な点がありましたらご質問ください。
お力をお貸しください。よろしくお願いします。


実行機器:RaspberryPi 3 (CUI環境にて使用しています。)
OS:Ubuntu 14.04
ROSver: ROS indigo


※実行機器であるRaspberrypiはCUI環境であるため、実行結果(カメラからの映像ウィンドウなど)は同じネットワークに繋がれたPCにて表示させるつもりでした。


Junya Hayashi

unread,
Oct 25, 2016, 9:37:06 PM10/25/16
to ros-jap...@googlegroups.com
ros-indigo-cv-bridge がインストールされていないのではないでしょうか?

$ dpkg -l | grep cv-bridge

でパッケージは表示されますか?


2016年10月25日 20:26 Kyaiktiyo <musashi....@gmail.com>:

--
このメールは Google グループのグループ「ROS JAPAN Users Group」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには ros-japan-users+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Kyaiktiyo

unread,
Oct 26, 2016, 5:55:29 AM10/26/16
to ROS JAPAN Users Group
Junya Hayashi 様

$ dpkg -l | grep cv-bridge を実行したところ何も表示されず、インストールされていないことがわかりました。
よって、cv-bridgeをインストールしたところ、無事プログラムは正常に動作いたしました。
本当にありがとうございます。
また何か機会がありましたらよろしくお願いします。

2016年10月26日水曜日 10時37分06秒 UTC+9 Junya Hayashi:
このグループから退会し、グループからのメールの配信を停止するには ros-japan-use...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Reply all
Reply to author
Forward
0 new messages