#!/usr/bin/env python
import roslib
import sys
import rospy
import cv2
import math, time
import numpy as np
from std_msgs.msg import String
from sensor_msgs.msg import Image
from geometry_msgs.msg import Point
from cv_bridge import CvBridge, CvBridgeError
class image_converter_depth :
def is_detected(self):
return(time.time() - self._time_detected < 1.0)
def __init__(self):
self._t0 = time.time()
self.obj_point = Point()
self.blob_x = 0.0
self.blob_y = 0.0
self._time_detected = 0.0
self.blob_sub = rospy.Subsciber("blob/point_blob",Point, self.update_blob)
rospy.loginfo("Subsciber to blob point set")
self.image_pub = rospy.Publisher("Depth_image",Image)
rospy.loginfo("Publisher with circle in depth image ")
self.obj_pub = rospy.Publisher("blob/obj_point",Point)
self.bridege = CVBridge()
self.image_sub = rospy.Subsciber("/kinect2/sd/image_depth",Image,self.callback)
rospy.loginfo("Subsciber sd to depth image ")
def update_blob(self,message):
self.blob_x = message.x
self.blob_y = message.y
self._time_detected = time.time()
def callback(self,data):
try:
cv_image=self.bridge.image_to_cv2(data,"mono16")
except CVBridegeError as e :
print(e)
(rows,cols,channels)=cv_image.shape
if ((int(rows/2))<int(self.blob_x)<(1920-int(rows/2))):
if (int(cols/2)<int(self.blob_y)<1080-int(cols/2)):
x_depth = self.blob_x-(960-int(rows/2))
y_depth = self.blob_y-(540-int(cols/2))
self.obj_point.z = cv_image[x_depth,y_depth]
self.obj_pub.publish(self.obj_point)
try:
self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"mono16"))
except CVBridegeError as e :
print(e)
def main (args):
ic = image_converter_depth()
rospy.init("Get_Obj_Pos", anononymus=True)
try:
rospy.spin()
except KeyboardInterrupt:
print("Shutting down")
cv2.destroyAllWindows()
if __name__ == '__main__':
main(sys.argv)
but I have this error
rosrun Get_Obj_Pos Get_Pos.py
File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 41
self.blob_y = message.y
^
IndentationError: unindent does not match any outer indentation level