face detection ros2 module working
parent
c2d0bf956b
commit
fbbddb4bd0
|
|
@ -11,27 +11,27 @@ from std_msgs.msg import String
|
|||
import rclpy
|
||||
|
||||
|
||||
|
||||
|
||||
class CamPublisher(ThreadedNode):
|
||||
def __init__(self):
|
||||
def __init__(self, rknn, cap):
|
||||
super().__init__('camera_module', default_rate=5.0)
|
||||
self.string_pub = self.create_publisher(String, 'camera_module/cam_topic', 10)
|
||||
self.image_pub = self.create_publisher(CompressedImage, 'camera_module/compressed', 10)
|
||||
|
||||
# Try multiple device indices
|
||||
self.cap = None
|
||||
for i in range(5):
|
||||
cap = cv2.VideoCapture(i)
|
||||
if cap.isOpened():
|
||||
self.cap = cap
|
||||
self.get_logger().info(f'Opened webcam at index {i}')
|
||||
break
|
||||
self.rknn = rknn
|
||||
self.cap = cap
|
||||
self.latest_frame = None
|
||||
self.latest_faces = []
|
||||
self.model_size = (320, 320)
|
||||
self.priors = PriorBox(self.model_size)
|
||||
self.prev_time = time.time()
|
||||
|
||||
if self.cap is None:
|
||||
self.get_logger().error('Failed to open any webcam')
|
||||
|
||||
# Lower resolution
|
||||
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
|
||||
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
|
||||
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
|
||||
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
|
||||
|
||||
# Faster JPEG encoding
|
||||
|
||||
|
|
@ -50,30 +50,161 @@ class CamPublisher(ThreadedNode):
|
|||
self.get_logger().error('No webcam available')
|
||||
return
|
||||
|
||||
ret, frame = self.cap.read()
|
||||
if not ret or frame is None:
|
||||
self.get_logger().error('Camera read failed')
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
return
|
||||
img_height, img_width, _ = frame.shape
|
||||
letterbox_img, aspect_ratio, offset_x, offset_y = letterbox_resize(frame, model_size, 114)
|
||||
infer_img = np.expand_dims(letterbox_img.astype(np.uint8), axis=0)
|
||||
|
||||
outputs = rknn.inference(inputs=[infer_img])
|
||||
if outputs is None:
|
||||
return
|
||||
|
||||
try:
|
||||
msg = CompressedImage()
|
||||
msg.header.stamp = self.get_clock().now().to_msg()
|
||||
msg.format = 'jpeg'
|
||||
msg.data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])[1].tobytes()
|
||||
#msg.data = cv2.imencode('.jpg', frame)[1].tobytes()
|
||||
self.image_pub.publish(msg)
|
||||
self.get_logger().info('Published webcam frame')
|
||||
except Exception as e:
|
||||
self.get_logger().error(f'Failed to convert/publish image: {e}')
|
||||
loc, conf, landms = outputs
|
||||
boxes = box_decode(loc.squeeze(0), priors)
|
||||
boxes *= np.array([model_size[1], model_size[0], model_size[1], model_size[0]])
|
||||
boxes[:, 0::2] = np.clip((boxes[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
|
||||
boxes[:, 1::2] = np.clip((boxes[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
|
||||
|
||||
scores = conf.squeeze(0)[:, 1]
|
||||
landms = decode_landm(landms.squeeze(0), priors)
|
||||
landms *= np.tile(np.array([model_size[1], model_size[0]]), 5)
|
||||
landms[:, 0::2] = np.clip((landms[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
|
||||
landms[:, 1::2] = np.clip((landms[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
|
||||
|
||||
inds = np.where(scores > 0.2)[0]
|
||||
boxes, landms, scores = boxes[inds], landms[inds], scores[inds]
|
||||
order = scores.argsort()[::-1]
|
||||
boxes, landms, scores = boxes[order], landms[order], scores[order]
|
||||
|
||||
dets = np.hstack((boxes, scores[:, np.newaxis])).astype(np.float32)
|
||||
keep = nms(dets, 0.5)
|
||||
dets, landms = dets[keep], landms[keep]
|
||||
|
||||
face_data = []
|
||||
frame_center = np.array([img_width / 2, img_height / 2])
|
||||
|
||||
for data, landmark in zip(dets, landms):
|
||||
if data[4] < 0.6:
|
||||
continue
|
||||
x1, y1, x2, y2 = map(int, data[:4])
|
||||
conf = data[4]
|
||||
box_center = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
|
||||
offset = box_center - frame_center
|
||||
face_data.append({
|
||||
"box": [x1, y1, x2, y2],
|
||||
"confidence": float(conf),
|
||||
"offset_from_center": {
|
||||
"x": float(offset[0]),
|
||||
"y": float(offset[1])
|
||||
}
|
||||
})
|
||||
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
|
||||
cv2.putText(frame, f'{conf:.4f}', (x1, y1 + 12), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
|
||||
for j in range(5):
|
||||
lx, ly = map(int, landmark[j*2:j*2+2])
|
||||
cv2.circle(frame, (lx, ly), 1, (0, 255, 255), 2)
|
||||
|
||||
cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30),
|
||||
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
|
||||
if len(face_data) > 0:
|
||||
print(face_data)
|
||||
ret, buffer = cv2.imencode('.jpg', frame)
|
||||
if ret:
|
||||
latest_frame = buffer.tobytes()
|
||||
latest_faces = face_data
|
||||
|
||||
def destroy_node(self):
|
||||
if self.cap:
|
||||
self.cap.release()
|
||||
super().destroy_node()
|
||||
|
||||
|
||||
# --- RetinaFace Utilities ---
|
||||
def letterbox_resize(image, size, bg_color):
|
||||
target_width, target_height = size
|
||||
image_height, image_width, _ = image.shape
|
||||
aspect_ratio = min(target_width / image_width, target_height / image_height)
|
||||
new_width = int(image_width * aspect_ratio)
|
||||
new_height = int(image_height * aspect_ratio)
|
||||
image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
|
||||
result_image = np.ones((target_height, target_width, 3), dtype=np.uint8) * bg_color
|
||||
offset_x = (target_width - new_width) // 2
|
||||
offset_y = (target_height - new_height) // 2
|
||||
result_image[offset_y:offset_y + new_height, offset_x:offset_x + new_width] = image
|
||||
return result_image, aspect_ratio, offset_x, offset_y
|
||||
|
||||
def PriorBox(image_size):
|
||||
anchors = []
|
||||
min_sizes = [[16, 32], [64, 128], [256, 512]]
|
||||
steps = [8, 16, 32]
|
||||
feature_maps = [[ceil(image_size[0] / step), ceil(image_size[1] / step)] for step in steps]
|
||||
for k, f in enumerate(feature_maps):
|
||||
min_sizes_ = min_sizes[k]
|
||||
for i, j in product(range(f[0]), range(f[1])):
|
||||
for min_size in min_sizes_:
|
||||
s_kx = min_size / image_size[1]
|
||||
s_ky = min_size / image_size[0]
|
||||
dense_cx = [x * steps[k] / image_size[1] for x in [j + 0.5]]
|
||||
dense_cy = [y * steps[k] / image_size[0] for y in [i + 0.5]]
|
||||
for cy, cx in product(dense_cy, dense_cx):
|
||||
anchors += [cx, cy, s_kx, s_ky]
|
||||
return np.array(anchors).reshape(-1, 4)
|
||||
|
||||
def box_decode(loc, priors):
|
||||
variances = [0.1, 0.2]
|
||||
boxes = np.concatenate((
|
||||
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
|
||||
priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1)
|
||||
boxes[:, :2] -= boxes[:, 2:] / 2
|
||||
boxes[:, 2:] += boxes[:, :2]
|
||||
return boxes
|
||||
|
||||
def decode_landm(pre, priors):
|
||||
variances = [0.1, 0.2]
|
||||
landmarks = np.concatenate((
|
||||
priors[:, :2] + pre[:, 0:2] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]
|
||||
), axis=1)
|
||||
return landmarks
|
||||
|
||||
def nms(dets, thresh):
|
||||
x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4]
|
||||
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
|
||||
order = scores.argsort()[::-1]
|
||||
keep = []
|
||||
while order.size > 0:
|
||||
i = order[0]
|
||||
keep.append(i)
|
||||
xx1 = np.maximum(x1[i], x1[order[1:]])
|
||||
yy1 = np.maximum(y1[i], y1[order[1:]])
|
||||
xx2 = np.minimum(x2[i], x2[order[1:]])
|
||||
yy2 = np.minimum(y2[i], y2[order[1:]])
|
||||
w = np.maximum(0.0, xx2 - xx1 + 1)
|
||||
h = np.maximum(0.0, yy2 - yy1 + 1)
|
||||
inter = w * h
|
||||
ovr = inter / (areas[i] + areas[order[1:]] - inter)
|
||||
inds = np.where(ovr <= thresh)[0]
|
||||
order = order[inds + 1]
|
||||
return keep
|
||||
|
||||
# --- RKNN Initialization ---
|
||||
rknn = RKNNLite()
|
||||
rknn.load_rknn('./RetinaFace.rknn')
|
||||
rknn.init_runtime()
|
||||
|
||||
# --- Shared State ---
|
||||
latest_frame = None
|
||||
latest_faces = []
|
||||
cap = cv2.VideoCapture(0)
|
||||
|
||||
def main():
|
||||
rclpy.init()
|
||||
node = CamPublisher()
|
||||
node = CamPublisher(rknn, cap)
|
||||
rclpy.spin(node)
|
||||
node.destroy_node()
|
||||
rclpy.shutdown()
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ LESSCLOSE=/usr/bin/lesspipe %s %s
|
|||
LESSOPEN=| /usr/bin/lesspipe %s
|
||||
LOGNAME=jake
|
||||
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:
|
||||
MOTD_SHOWN=update-motd
|
||||
NAME=DESKTOP-UFLG41E
|
||||
OLDPWD=/home/jake/ros2_ws
|
||||
PATH=/home/jake/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/bin/remote-cli:/home/jake/.local/bin:/home/jake/miniconda3/condabin:/opt/ros/kilted/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Program Files/usbipd-win/:/mnt/c/Users/jake/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/jake/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin:/home/jake/.vscode-server/data/User/globalStorage/github.copilot-chat/debugCommand
|
||||
|
|
@ -37,13 +36,13 @@ VSCODE_GIT_ASKPASS_EXTRA_ARGS=
|
|||
VSCODE_GIT_ASKPASS_MAIN=/home/jake/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/extensions/git/dist/askpass-main.js
|
||||
VSCODE_GIT_ASKPASS_NODE=/home/jake/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/node
|
||||
VSCODE_GIT_IPC_HANDLE=/run/user/1001/vscode-git-1d6e8e65c1.sock
|
||||
VSCODE_IPC_HOOK_CLI=/run/user/1001/vscode-ipc-a80506a6-314e-4f1a-bfb0-04fa92945475.sock
|
||||
VSCODE_IPC_HOOK_CLI=/run/user/1001/vscode-ipc-07b86bca-e4f9-4c18-ba3e-d1abb3d5b6bc.sock
|
||||
VSCODE_PYTHON_AUTOACTIVATE_GUARD=1
|
||||
WAYLAND_DISPLAY=wayland-0
|
||||
WSL2_GUI_APPS_ENABLED=1
|
||||
WSLENV=VSCODE_WSL_EXT_LOCATION/up
|
||||
WSL_DISTRO_NAME=Ubuntu-24.04
|
||||
WSL_INTEROP=/run/WSL/170769_interop
|
||||
WSL_INTEROP=/run/WSL/440_interop
|
||||
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
|
||||
XDG_RUNTIME_DIR=/run/user/1001/
|
||||
_=/usr/bin/colcon
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -58,7 +58,7 @@
|
|||
<img id="cameraImage" width="640" height="480" alt="Camera Feed">
|
||||
|
||||
<script>
|
||||
const ros = new ROSLIB.Ros({ url: 'ws://localhost:9090' });
|
||||
const ros = new ROSLIB.Ros({ url: 'ws://192.168.1.205:9090' });
|
||||
|
||||
ros.on('connection', () => {
|
||||
console.log('Connected to rosbridge');
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -11,27 +11,27 @@ from std_msgs.msg import String
|
|||
import rclpy
|
||||
|
||||
|
||||
|
||||
|
||||
class CamPublisher(ThreadedNode):
|
||||
def __init__(self):
|
||||
def __init__(self, rknn, cap):
|
||||
super().__init__('camera_module', default_rate=5.0)
|
||||
self.string_pub = self.create_publisher(String, 'camera_module/cam_topic', 10)
|
||||
self.image_pub = self.create_publisher(CompressedImage, 'camera_module/compressed', 10)
|
||||
|
||||
# Try multiple device indices
|
||||
self.cap = None
|
||||
for i in range(5):
|
||||
cap = cv2.VideoCapture(i)
|
||||
if cap.isOpened():
|
||||
self.cap = cap
|
||||
self.get_logger().info(f'Opened webcam at index {i}')
|
||||
break
|
||||
self.rknn = rknn
|
||||
self.cap = cap
|
||||
self.latest_frame = None
|
||||
self.latest_faces = []
|
||||
self.model_size = (320, 320)
|
||||
self.priors = PriorBox(self.model_size)
|
||||
self.prev_time = time.time()
|
||||
|
||||
if self.cap is None:
|
||||
self.get_logger().error('Failed to open any webcam')
|
||||
|
||||
# Lower resolution
|
||||
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
|
||||
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
|
||||
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
|
||||
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
|
||||
|
||||
# Faster JPEG encoding
|
||||
|
||||
|
|
@ -50,30 +50,161 @@ class CamPublisher(ThreadedNode):
|
|||
self.get_logger().error('No webcam available')
|
||||
return
|
||||
|
||||
ret, frame = self.cap.read()
|
||||
if not ret or frame is None:
|
||||
self.get_logger().error('Camera read failed')
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
return
|
||||
img_height, img_width, _ = frame.shape
|
||||
letterbox_img, aspect_ratio, offset_x, offset_y = letterbox_resize(frame, model_size, 114)
|
||||
infer_img = np.expand_dims(letterbox_img.astype(np.uint8), axis=0)
|
||||
|
||||
outputs = rknn.inference(inputs=[infer_img])
|
||||
if outputs is None:
|
||||
return
|
||||
|
||||
try:
|
||||
msg = CompressedImage()
|
||||
msg.header.stamp = self.get_clock().now().to_msg()
|
||||
msg.format = 'jpeg'
|
||||
msg.data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])[1].tobytes()
|
||||
#msg.data = cv2.imencode('.jpg', frame)[1].tobytes()
|
||||
self.image_pub.publish(msg)
|
||||
self.get_logger().info('Published webcam frame')
|
||||
except Exception as e:
|
||||
self.get_logger().error(f'Failed to convert/publish image: {e}')
|
||||
loc, conf, landms = outputs
|
||||
boxes = box_decode(loc.squeeze(0), priors)
|
||||
boxes *= np.array([model_size[1], model_size[0], model_size[1], model_size[0]])
|
||||
boxes[:, 0::2] = np.clip((boxes[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
|
||||
boxes[:, 1::2] = np.clip((boxes[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
|
||||
|
||||
scores = conf.squeeze(0)[:, 1]
|
||||
landms = decode_landm(landms.squeeze(0), priors)
|
||||
landms *= np.tile(np.array([model_size[1], model_size[0]]), 5)
|
||||
landms[:, 0::2] = np.clip((landms[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
|
||||
landms[:, 1::2] = np.clip((landms[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
|
||||
|
||||
inds = np.where(scores > 0.2)[0]
|
||||
boxes, landms, scores = boxes[inds], landms[inds], scores[inds]
|
||||
order = scores.argsort()[::-1]
|
||||
boxes, landms, scores = boxes[order], landms[order], scores[order]
|
||||
|
||||
dets = np.hstack((boxes, scores[:, np.newaxis])).astype(np.float32)
|
||||
keep = nms(dets, 0.5)
|
||||
dets, landms = dets[keep], landms[keep]
|
||||
|
||||
face_data = []
|
||||
frame_center = np.array([img_width / 2, img_height / 2])
|
||||
|
||||
for data, landmark in zip(dets, landms):
|
||||
if data[4] < 0.6:
|
||||
continue
|
||||
x1, y1, x2, y2 = map(int, data[:4])
|
||||
conf = data[4]
|
||||
box_center = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
|
||||
offset = box_center - frame_center
|
||||
face_data.append({
|
||||
"box": [x1, y1, x2, y2],
|
||||
"confidence": float(conf),
|
||||
"offset_from_center": {
|
||||
"x": float(offset[0]),
|
||||
"y": float(offset[1])
|
||||
}
|
||||
})
|
||||
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
|
||||
cv2.putText(frame, f'{conf:.4f}', (x1, y1 + 12), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
|
||||
for j in range(5):
|
||||
lx, ly = map(int, landmark[j*2:j*2+2])
|
||||
cv2.circle(frame, (lx, ly), 1, (0, 255, 255), 2)
|
||||
|
||||
cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30),
|
||||
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
|
||||
if len(face_data) > 0:
|
||||
print(face_data)
|
||||
ret, buffer = cv2.imencode('.jpg', frame)
|
||||
if ret:
|
||||
latest_frame = buffer.tobytes()
|
||||
latest_faces = face_data
|
||||
|
||||
def destroy_node(self):
|
||||
if self.cap:
|
||||
self.cap.release()
|
||||
super().destroy_node()
|
||||
|
||||
|
||||
# --- RetinaFace Utilities ---
|
||||
def letterbox_resize(image, size, bg_color):
|
||||
target_width, target_height = size
|
||||
image_height, image_width, _ = image.shape
|
||||
aspect_ratio = min(target_width / image_width, target_height / image_height)
|
||||
new_width = int(image_width * aspect_ratio)
|
||||
new_height = int(image_height * aspect_ratio)
|
||||
image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
|
||||
result_image = np.ones((target_height, target_width, 3), dtype=np.uint8) * bg_color
|
||||
offset_x = (target_width - new_width) // 2
|
||||
offset_y = (target_height - new_height) // 2
|
||||
result_image[offset_y:offset_y + new_height, offset_x:offset_x + new_width] = image
|
||||
return result_image, aspect_ratio, offset_x, offset_y
|
||||
|
||||
def PriorBox(image_size):
|
||||
anchors = []
|
||||
min_sizes = [[16, 32], [64, 128], [256, 512]]
|
||||
steps = [8, 16, 32]
|
||||
feature_maps = [[ceil(image_size[0] / step), ceil(image_size[1] / step)] for step in steps]
|
||||
for k, f in enumerate(feature_maps):
|
||||
min_sizes_ = min_sizes[k]
|
||||
for i, j in product(range(f[0]), range(f[1])):
|
||||
for min_size in min_sizes_:
|
||||
s_kx = min_size / image_size[1]
|
||||
s_ky = min_size / image_size[0]
|
||||
dense_cx = [x * steps[k] / image_size[1] for x in [j + 0.5]]
|
||||
dense_cy = [y * steps[k] / image_size[0] for y in [i + 0.5]]
|
||||
for cy, cx in product(dense_cy, dense_cx):
|
||||
anchors += [cx, cy, s_kx, s_ky]
|
||||
return np.array(anchors).reshape(-1, 4)
|
||||
|
||||
def box_decode(loc, priors):
|
||||
variances = [0.1, 0.2]
|
||||
boxes = np.concatenate((
|
||||
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
|
||||
priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1)
|
||||
boxes[:, :2] -= boxes[:, 2:] / 2
|
||||
boxes[:, 2:] += boxes[:, :2]
|
||||
return boxes
|
||||
|
||||
def decode_landm(pre, priors):
|
||||
variances = [0.1, 0.2]
|
||||
landmarks = np.concatenate((
|
||||
priors[:, :2] + pre[:, 0:2] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]
|
||||
), axis=1)
|
||||
return landmarks
|
||||
|
||||
def nms(dets, thresh):
|
||||
x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4]
|
||||
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
|
||||
order = scores.argsort()[::-1]
|
||||
keep = []
|
||||
while order.size > 0:
|
||||
i = order[0]
|
||||
keep.append(i)
|
||||
xx1 = np.maximum(x1[i], x1[order[1:]])
|
||||
yy1 = np.maximum(y1[i], y1[order[1:]])
|
||||
xx2 = np.minimum(x2[i], x2[order[1:]])
|
||||
yy2 = np.minimum(y2[i], y2[order[1:]])
|
||||
w = np.maximum(0.0, xx2 - xx1 + 1)
|
||||
h = np.maximum(0.0, yy2 - yy1 + 1)
|
||||
inter = w * h
|
||||
ovr = inter / (areas[i] + areas[order[1:]] - inter)
|
||||
inds = np.where(ovr <= thresh)[0]
|
||||
order = order[inds + 1]
|
||||
return keep
|
||||
|
||||
# --- RKNN Initialization ---
|
||||
rknn = RKNNLite()
|
||||
rknn.load_rknn('./RetinaFace.rknn')
|
||||
rknn.init_runtime()
|
||||
|
||||
# --- Shared State ---
|
||||
latest_frame = None
|
||||
latest_faces = []
|
||||
cap = cv2.VideoCapture(0)
|
||||
|
||||
def main():
|
||||
rclpy.init()
|
||||
node = CamPublisher()
|
||||
node = CamPublisher(rknn, cap)
|
||||
rclpy.spin(node)
|
||||
node.destroy_node()
|
||||
rclpy.shutdown()
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,43 +1,43 @@
|
|||
[0.796s] Invoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
|
||||
[1.041s] running egg_info
|
||||
[1.041s] creating ../../build/camera_module/camera_module.egg-info
|
||||
[1.062s] writing ../../build/camera_module/camera_module.egg-info/PKG-INFO
|
||||
[1.062s] writing dependency_links to ../../build/camera_module/camera_module.egg-info/dependency_links.txt
|
||||
[1.063s] writing entry points to ../../build/camera_module/camera_module.egg-info/entry_points.txt
|
||||
[1.063s] writing requirements to ../../build/camera_module/camera_module.egg-info/requires.txt
|
||||
[1.063s] writing top-level names to ../../build/camera_module/camera_module.egg-info/top_level.txt
|
||||
[1.063s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
|
||||
[1.104s] reading manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
|
||||
[1.104s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
|
||||
[1.105s] running build
|
||||
[1.105s] running build_py
|
||||
[1.105s] creating /home/jake/ros2_ws/build/camera_module/build
|
||||
[1.106s] creating /home/jake/ros2_ws/build/camera_module/build/lib
|
||||
[1.106s] creating /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.107s] copying ./camera_module/__init__.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.107s] copying ./camera_module/camera_module.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.107s] copying ./camera_module/threaded_node.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.107s] running install
|
||||
[1.114s] running install_lib
|
||||
[1.134s] creating /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.134s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/__init__.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.135s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/camera_module.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.135s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/threaded_node.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.135s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/__init__.py to __init__.cpython-312.pyc
|
||||
[1.136s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/camera_module.py to camera_module.cpython-312.pyc
|
||||
[1.137s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/threaded_node.py to threaded_node.cpython-312.pyc
|
||||
[1.138s] running install_data
|
||||
[1.139s] copying package.xml -> /home/jake/ros2_ws/install/camera_module/share/camera_module
|
||||
[1.139s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource
|
||||
[1.139s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
|
||||
[1.140s] copying resource/model/RetinaFace.rknn -> /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
|
||||
[1.141s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index
|
||||
[1.142s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index
|
||||
[1.142s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
|
||||
[1.143s] copying resource/camera_module -> /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
|
||||
[1.143s] running install_egg_info
|
||||
[1.165s] Copying ../../build/camera_module/camera_module.egg-info to /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module-0.1.0-py3.12.egg-info
|
||||
[1.166s] running install_scripts
|
||||
[1.301s] Installing camera_module script to /home/jake/ros2_ws/install/camera_module/bin
|
||||
[1.302s] writing list of installed files to '/home/jake/ros2_ws/build/camera_module/install.log'
|
||||
[1.337s] Invoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
|
||||
[0.774s] Invoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
|
||||
[1.009s] running egg_info
|
||||
[1.009s] creating ../../build/camera_module/camera_module.egg-info
|
||||
[1.028s] writing ../../build/camera_module/camera_module.egg-info/PKG-INFO
|
||||
[1.029s] writing dependency_links to ../../build/camera_module/camera_module.egg-info/dependency_links.txt
|
||||
[1.029s] writing entry points to ../../build/camera_module/camera_module.egg-info/entry_points.txt
|
||||
[1.030s] writing requirements to ../../build/camera_module/camera_module.egg-info/requires.txt
|
||||
[1.030s] writing top-level names to ../../build/camera_module/camera_module.egg-info/top_level.txt
|
||||
[1.030s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
|
||||
[1.066s] reading manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
|
||||
[1.067s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
|
||||
[1.071s] running build
|
||||
[1.071s] running build_py
|
||||
[1.071s] creating /home/jake/ros2_ws/build/camera_module/build
|
||||
[1.072s] creating /home/jake/ros2_ws/build/camera_module/build/lib
|
||||
[1.072s] creating /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.073s] copying ./camera_module/__init__.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.073s] copying ./camera_module/camera_module.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.073s] copying ./camera_module/threaded_node.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
|
||||
[1.074s] running install
|
||||
[1.079s] running install_lib
|
||||
[1.098s] creating /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.099s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/__init__.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.099s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/camera_module.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.099s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/threaded_node.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
|
||||
[1.100s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/__init__.py to __init__.cpython-312.pyc
|
||||
[1.100s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/camera_module.py to camera_module.cpython-312.pyc
|
||||
[1.103s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/threaded_node.py to threaded_node.cpython-312.pyc
|
||||
[1.104s] running install_data
|
||||
[1.105s] copying package.xml -> /home/jake/ros2_ws/install/camera_module/share/camera_module
|
||||
[1.105s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource
|
||||
[1.105s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
|
||||
[1.106s] copying resource/model/RetinaFace.rknn -> /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
|
||||
[1.107s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index
|
||||
[1.108s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index
|
||||
[1.108s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
|
||||
[1.109s] copying resource/camera_module -> /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
|
||||
[1.109s] running install_egg_info
|
||||
[1.129s] Copying ../../build/camera_module/camera_module.egg-info to /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module-0.1.0-py3.12.egg-info
|
||||
[1.131s] running install_scripts
|
||||
[1.252s] Installing camera_module script to /home/jake/ros2_ws/install/camera_module/bin
|
||||
[1.253s] writing list of installed files to '/home/jake/ros2_ws/build/camera_module/install.log'
|
||||
[1.286s] Invoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,216 +1,216 @@
|
|||
[0.124s] [34mcolcon[0m [1;30mDEBUG[0m [32mCommand line arguments: ['/usr/bin/colcon', 'build', '--packages-select', 'camera_module', '--event-handlers', 'console_direct+'][0m
|
||||
[0.124s] [34mcolcon[0m [1;30mDEBUG[0m [32mParsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=24, event_handlers=['console_direct+'], ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=['camera_module'], packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0x73b477307230>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0x73b4774ae4e0>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0x73b4774ae4e0>>)[0m
|
||||
[0.161s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(colcon_meta) check parameters
|
||||
[0.161s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(recursive) check parameters
|
||||
[0.161s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(ignore) check parameters
|
||||
[0.162s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(path) check parameters
|
||||
[0.162s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(colcon_meta) discover
|
||||
[0.162s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(recursive) discover
|
||||
[0.162s] [34mcolcon.colcon_core.package_discovery[0m [1;30mINFO[0m Crawling recursively for packages in '/home/jake/ros2_ws'
|
||||
[0.162s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.162s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'ignore'
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'ignore_ament_install'
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['colcon_pkg']
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'colcon_pkg'
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['colcon_meta']
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'colcon_meta'
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['ros']
|
||||
[0.163s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'ros'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['cmake', 'python']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'cmake'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'python'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['python_setup_py']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'python_setup_py'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(build) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(build) by extension 'ignore'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(build) ignored
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(install) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(install) by extension 'ignore'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(install) ignored
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(log) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(log) by extension 'ignore'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(log) ignored
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'ignore'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'ignore_ament_install'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['colcon_pkg']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'colcon_pkg'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['colcon_meta']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'colcon_meta'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['ros']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'ros'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['cmake', 'python']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'cmake'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'python'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['python_setup_py']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'python_setup_py'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'ignore'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'ignore_ament_install'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['colcon_pkg']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'colcon_pkg'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['colcon_meta']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'colcon_meta'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['ros']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'ros'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/cam_test' with type 'ros.ament_python' and name 'cam_test'[0m
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'ignore'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'ignore_ament_install'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['colcon_pkg']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'colcon_pkg'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['colcon_meta']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'colcon_meta'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['ros']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'ros'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/camera_module' with type 'ros.ament_python' and name 'camera_module'[0m
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'ignore'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'ignore_ament_install'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['colcon_pkg']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'colcon_pkg'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['colcon_meta']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'colcon_meta'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['ros']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'ros'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/hello_pub' with type 'ros.ament_python' and name 'hello_pub'[0m
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'ignore'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'ignore_ament_install'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['colcon_pkg']
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'colcon_pkg'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['colcon_meta']
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'colcon_meta'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['ros']
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'ros'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['cmake', 'python']
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'cmake'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'python'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['python_setup_py']
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'python_setup_py'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'ignore'
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'ignore_ament_install'
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_pkg']
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'colcon_pkg'
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_meta']
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'colcon_meta'
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['ros']
|
||||
[0.193s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'ros'
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/cv_bridge' with type 'ros.ament_cmake' and name 'cv_bridge'[0m
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'ignore'
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'ignore_ament_install'
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['colcon_pkg']
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'colcon_pkg'
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['colcon_meta']
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'colcon_meta'
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['ros']
|
||||
[0.194s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'ros'
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/image_geometry' with type 'ros.ament_cmake' and name 'image_geometry'[0m
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'ignore'
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'ignore_ament_install'
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_pkg']
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'colcon_pkg'
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_meta']
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'colcon_meta'
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['ros']
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'ros'
|
||||
[0.195s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/opencv_tests' with type 'ros.ament_python' and name 'opencv_tests'[0m
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'ignore'
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'ignore_ament_install'
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_pkg']
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'colcon_pkg'
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_meta']
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'colcon_meta'
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['ros']
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'ros'
|
||||
[0.196s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/vision_opencv' with type 'ros.ament_cmake' and name 'vision_opencv'[0m
|
||||
[0.196s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(recursive) using defaults
|
||||
[0.196s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(ignore) discover
|
||||
[0.196s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(ignore) using defaults
|
||||
[0.196s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(path) discover
|
||||
[0.196s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(path) using defaults
|
||||
[0.211s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'cam_test' in 'src/cam_test'
|
||||
[0.211s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'cv_bridge' in 'src/vision_opencv/cv_bridge'
|
||||
[0.211s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'hello_pub' in 'src/hello_pub'
|
||||
[0.211s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'image_geometry' in 'src/vision_opencv/image_geometry'
|
||||
[0.211s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'opencv_tests' in 'src/vision_opencv/opencv_tests'
|
||||
[0.211s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'vision_opencv' in 'src/vision_opencv/vision_opencv'
|
||||
[0.212s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(prefix_path) check parameters
|
||||
[0.212s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(prefix_path) discover
|
||||
[0.214s] [34mcolcon.colcon_installed_package_information.package_discovery[0m [1;30mDEBUG[0m [32mFound 295 installed packages in /opt/ros/kilted[0m
|
||||
[0.216s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(prefix_path) using defaults
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_args' from command line to 'None'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_target' from command line to 'None'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_target_skip_unavailable' from command line to 'False'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_clean_cache' from command line to 'False'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_clean_first' from command line to 'False'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_force_configure' from command line to 'False'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'ament_cmake_args' from command line to 'None'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'catkin_cmake_args' from command line to 'None'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'catkin_skip_building_tests' from command line to 'False'
|
||||
[0.255s] [34mcolcon.colcon_core.verb[0m [1;30mDEBUG[0m [32mBuilding package 'camera_module' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/jake/ros2_ws/build/camera_module', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/jake/ros2_ws/install/camera_module', 'merge_install': False, 'path': '/home/jake/ros2_ws/src/camera_module', 'symlink_install': False, 'test_result_base': None}[0m
|
||||
[0.255s] [34mcolcon.colcon_core.executor[0m [1;30mINFO[0m Executing jobs using 'parallel' executor
|
||||
[0.256s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mrun_until_complete[0m
|
||||
[0.257s] [34mcolcon.colcon_ros.task.ament_python.build[0m [1;30mINFO[0m Building ROS package in '/home/jake/ros2_ws/src/camera_module' with build type 'ament_python'
|
||||
[0.257s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'ament_prefix_path')
|
||||
[0.259s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
|
||||
[0.259s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.ps1'
|
||||
[0.262s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.dsv'
|
||||
[0.262s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.sh'
|
||||
[0.263s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
|
||||
[0.263s] [34mcolcon.colcon_core.shell[0m [1;30mDEBUG[0m [32mSkip shell extension 'dsv' for command environment[0m
|
||||
[0.471s] [34mcolcon.colcon_core.task.python.build[0m [1;30mINFO[0m Building Python package in '/home/jake/ros2_ws/src/camera_module'
|
||||
[0.471s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
|
||||
[0.472s] [34mcolcon.colcon_core.shell[0m [1;30mDEBUG[0m [32mSkip shell extension 'dsv' for command environment[0m
|
||||
[1.053s] [34mcolcon.colcon_core.event_handler.log_command[0m [1;30mDEBUG[0m [32mInvoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data[0m
|
||||
[1.595s] [34mcolcon.colcon_core.event_handler.log_command[0m [1;30mDEBUG[0m [32mInvoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data[0m
|
||||
[1.597s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module' for CMake module files
|
||||
[1.597s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module' for CMake config files
|
||||
[1.598s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/lib'
|
||||
[1.598s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/bin'
|
||||
[1.598s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'path')
|
||||
[1.598s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.ps1'
|
||||
[1.599s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.dsv'
|
||||
[1.599s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.sh'
|
||||
[1.600s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/lib/pkgconfig/camera_module.pc'
|
||||
[1.600s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages'
|
||||
[1.600s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'pythonpath')
|
||||
[1.600s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.ps1'
|
||||
[1.601s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.dsv'
|
||||
[1.601s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.sh'
|
||||
[1.601s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/bin'
|
||||
[1.602s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'pythonscriptspath')
|
||||
[1.602s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.ps1'
|
||||
[1.602s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.dsv'
|
||||
[1.602s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.sh'
|
||||
[1.603s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m create_environment_scripts_only(camera_module)
|
||||
[1.603s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.ps1'
|
||||
[1.604s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.dsv'
|
||||
[1.604s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.sh'
|
||||
[1.607s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.bash'
|
||||
[1.608s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.zsh'
|
||||
[1.608s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m create_file_with_runtime_dependencies(/home/jake/ros2_ws/install/camera_module/share/colcon-core/packages/camera_module)
|
||||
[1.610s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mclosing loop[0m
|
||||
[1.611s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mloop closed[0m
|
||||
[1.611s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mrun_until_complete finished with '0'[0m
|
||||
[1.612s] [34mcolcon.colcon_core.event_reactor[0m [1;30mDEBUG[0m [32mjoining thread[0m
|
||||
[1.633s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
|
||||
[1.634s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
|
||||
[1.634s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
|
||||
[1.634s] [34mcolcon.colcon_notification.desktop_notification[0m [1;30mINFO[0m Sending desktop notification using 'notify2'
|
||||
[1.635s] [34mcolcon.colcon_notification.desktop_notification.notify2[0m [1;30mDEBUG[0m [32mFailed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files[0m
|
||||
[1.635s] [34mcolcon.colcon_core.event_reactor[0m [1;30mDEBUG[0m [32mjoined thread[0m
|
||||
[1.636s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.ps1'
|
||||
[1.637s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_ps1.py'
|
||||
[1.638s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.ps1'
|
||||
[1.639s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.sh'
|
||||
[1.639s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_sh.py'
|
||||
[1.640s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.sh'
|
||||
[1.641s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.bash'
|
||||
[1.641s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.bash'
|
||||
[1.642s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.zsh'
|
||||
[1.643s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.zsh'
|
||||
[0.119s] [34mcolcon[0m [1;30mDEBUG[0m [32mCommand line arguments: ['/usr/bin/colcon', 'build', '--packages-select', 'camera_module', '--event-handlers', 'console_direct+'][0m
|
||||
[0.119s] [34mcolcon[0m [1;30mDEBUG[0m [32mParsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=24, event_handlers=['console_direct+'], ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=['camera_module'], packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0x7ea789fff050>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0x7ea789fa6510>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0x7ea789fa6510>>)[0m
|
||||
[0.158s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(colcon_meta) check parameters
|
||||
[0.159s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(recursive) check parameters
|
||||
[0.159s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(ignore) check parameters
|
||||
[0.159s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(path) check parameters
|
||||
[0.159s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(colcon_meta) discover
|
||||
[0.159s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(recursive) discover
|
||||
[0.159s] [34mcolcon.colcon_core.package_discovery[0m [1;30mINFO[0m Crawling recursively for packages in '/home/jake/ros2_ws'
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'ignore'
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'ignore_ament_install'
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['colcon_pkg']
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'colcon_pkg'
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['colcon_meta']
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'colcon_meta'
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['ros']
|
||||
[0.159s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'ros'
|
||||
[0.181s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['cmake', 'python']
|
||||
[0.181s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'cmake'
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'python'
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extensions ['python_setup_py']
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(.) by extension 'python_setup_py'
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(build) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(build) by extension 'ignore'
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(build) ignored
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(install) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(install) by extension 'ignore'
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(install) ignored
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(log) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(log) by extension 'ignore'
|
||||
[0.182s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(log) ignored
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'ignore'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'ignore_ament_install'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['colcon_pkg']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'colcon_pkg'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['colcon_meta']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'colcon_meta'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['ros']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'ros'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['cmake', 'python']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'cmake'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'python'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extensions ['python_setup_py']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src) by extension 'python_setup_py'
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.183s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'ignore'
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'ignore_ament_install'
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['colcon_pkg']
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'colcon_pkg'
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['colcon_meta']
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'colcon_meta'
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extensions ['ros']
|
||||
[0.184s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/cam_test) by extension 'ros'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/cam_test' with type 'ros.ament_python' and name 'cam_test'[0m
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'ignore'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'ignore_ament_install'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['colcon_pkg']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'colcon_pkg'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['colcon_meta']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'colcon_meta'
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extensions ['ros']
|
||||
[0.186s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/camera_module) by extension 'ros'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/camera_module' with type 'ros.ament_python' and name 'camera_module'[0m
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'ignore'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'ignore_ament_install'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['colcon_pkg']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'colcon_pkg'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['colcon_meta']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'colcon_meta'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extensions ['ros']
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/hello_pub) by extension 'ros'
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/hello_pub' with type 'ros.ament_python' and name 'hello_pub'[0m
|
||||
[0.187s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'ignore'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'ignore_ament_install'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['colcon_pkg']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'colcon_pkg'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['colcon_meta']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'colcon_meta'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['ros']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'ros'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['cmake', 'python']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'cmake'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'python'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extensions ['python_setup_py']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv) by extension 'python_setup_py'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'ignore'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'ignore_ament_install'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_pkg']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'colcon_pkg'
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_meta']
|
||||
[0.188s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'colcon_meta'
|
||||
[0.189s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extensions ['ros']
|
||||
[0.189s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/cv_bridge) by extension 'ros'
|
||||
[0.189s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/cv_bridge' with type 'ros.ament_cmake' and name 'cv_bridge'[0m
|
||||
[0.189s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'ignore'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'ignore_ament_install'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['colcon_pkg']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'colcon_pkg'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['colcon_meta']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'colcon_meta'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extensions ['ros']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/image_geometry) by extension 'ros'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/image_geometry' with type 'ros.ament_cmake' and name 'image_geometry'[0m
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'ignore'
|
||||
[0.190s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'ignore_ament_install'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_pkg']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'colcon_pkg'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_meta']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'colcon_meta'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extensions ['ros']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/opencv_tests) by extension 'ros'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/opencv_tests' with type 'ros.ament_python' and name 'opencv_tests'[0m
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'ignore'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'ignore_ament_install'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_pkg']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'colcon_pkg'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_meta']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'colcon_meta'
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extensions ['ros']
|
||||
[0.191s] [34mcolcon.colcon_core.package_identification[0m [1;30mLevel 1[0m _identify(src/vision_opencv/vision_opencv) by extension 'ros'
|
||||
[0.192s] [34mcolcon.colcon_core.package_identification[0m [1;30mDEBUG[0m [32mPackage 'src/vision_opencv/vision_opencv' with type 'ros.ament_cmake' and name 'vision_opencv'[0m
|
||||
[0.192s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(recursive) using defaults
|
||||
[0.192s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(ignore) discover
|
||||
[0.192s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(ignore) using defaults
|
||||
[0.192s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(path) discover
|
||||
[0.192s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(path) using defaults
|
||||
[0.206s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'cam_test' in 'src/cam_test'
|
||||
[0.206s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'cv_bridge' in 'src/vision_opencv/cv_bridge'
|
||||
[0.206s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'hello_pub' in 'src/hello_pub'
|
||||
[0.206s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'image_geometry' in 'src/vision_opencv/image_geometry'
|
||||
[0.206s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'opencv_tests' in 'src/vision_opencv/opencv_tests'
|
||||
[0.206s] [34mcolcon.colcon_core.package_selection[0m [1;30mINFO[0m Skipping not selected package 'vision_opencv' in 'src/vision_opencv/vision_opencv'
|
||||
[0.206s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(prefix_path) check parameters
|
||||
[0.206s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(prefix_path) discover
|
||||
[0.209s] [34mcolcon.colcon_installed_package_information.package_discovery[0m [1;30mDEBUG[0m [32mFound 295 installed packages in /opt/ros/kilted[0m
|
||||
[0.210s] [34mcolcon.colcon_core.package_discovery[0m [1;30mLevel 1[0m discover_packages(prefix_path) using defaults
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_args' from command line to 'None'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_target' from command line to 'None'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_target_skip_unavailable' from command line to 'False'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_clean_cache' from command line to 'False'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_clean_first' from command line to 'False'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'cmake_force_configure' from command line to 'False'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'ament_cmake_args' from command line to 'None'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'catkin_cmake_args' from command line to 'None'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mLevel 5[0m set package 'camera_module' build argument 'catkin_skip_building_tests' from command line to 'False'
|
||||
[0.248s] [34mcolcon.colcon_core.verb[0m [1;30mDEBUG[0m [32mBuilding package 'camera_module' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/jake/ros2_ws/build/camera_module', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/jake/ros2_ws/install/camera_module', 'merge_install': False, 'path': '/home/jake/ros2_ws/src/camera_module', 'symlink_install': False, 'test_result_base': None}[0m
|
||||
[0.248s] [34mcolcon.colcon_core.executor[0m [1;30mINFO[0m Executing jobs using 'parallel' executor
|
||||
[0.250s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mrun_until_complete[0m
|
||||
[0.250s] [34mcolcon.colcon_ros.task.ament_python.build[0m [1;30mINFO[0m Building ROS package in '/home/jake/ros2_ws/src/camera_module' with build type 'ament_python'
|
||||
[0.251s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'ament_prefix_path')
|
||||
[0.253s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
|
||||
[0.253s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.ps1'
|
||||
[0.256s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.dsv'
|
||||
[0.256s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.sh'
|
||||
[0.257s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
|
||||
[0.257s] [34mcolcon.colcon_core.shell[0m [1;30mDEBUG[0m [32mSkip shell extension 'dsv' for command environment[0m
|
||||
[0.454s] [34mcolcon.colcon_core.task.python.build[0m [1;30mINFO[0m Building Python package in '/home/jake/ros2_ws/src/camera_module'
|
||||
[0.454s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
|
||||
[0.454s] [34mcolcon.colcon_core.shell[0m [1;30mDEBUG[0m [32mSkip shell extension 'dsv' for command environment[0m
|
||||
[1.025s] [34mcolcon.colcon_core.event_handler.log_command[0m [1;30mDEBUG[0m [32mInvoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data[0m
|
||||
[1.537s] [34mcolcon.colcon_core.event_handler.log_command[0m [1;30mDEBUG[0m [32mInvoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data[0m
|
||||
[1.539s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module' for CMake module files
|
||||
[1.539s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module' for CMake config files
|
||||
[1.540s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/lib'
|
||||
[1.540s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/bin'
|
||||
[1.540s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'path')
|
||||
[1.540s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.ps1'
|
||||
[1.541s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.dsv'
|
||||
[1.541s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.sh'
|
||||
[1.541s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/lib/pkgconfig/camera_module.pc'
|
||||
[1.542s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages'
|
||||
[1.542s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'pythonpath')
|
||||
[1.542s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.ps1'
|
||||
[1.542s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.dsv'
|
||||
[1.543s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.sh'
|
||||
[1.543s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m checking '/home/jake/ros2_ws/install/camera_module/bin'
|
||||
[1.544s] [34mcolcon.colcon_core.shell[0m [1;30mLevel 1[0m create_environment_hook('camera_module', 'pythonscriptspath')
|
||||
[1.544s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.ps1'
|
||||
[1.544s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.dsv'
|
||||
[1.544s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.sh'
|
||||
[1.545s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m create_environment_scripts_only(camera_module)
|
||||
[1.545s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.ps1'
|
||||
[1.546s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.dsv'
|
||||
[1.546s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.sh'
|
||||
[1.547s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.bash'
|
||||
[1.547s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.zsh'
|
||||
[1.548s] [34mcolcon.colcon_core.environment[0m [1;30mLevel 1[0m create_file_with_runtime_dependencies(/home/jake/ros2_ws/install/camera_module/share/colcon-core/packages/camera_module)
|
||||
[1.549s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mclosing loop[0m
|
||||
[1.550s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mloop closed[0m
|
||||
[1.551s] [34mcolcon.colcon_parallel_executor.executor.parallel[0m [1;30mDEBUG[0m [32mrun_until_complete finished with '0'[0m
|
||||
[1.551s] [34mcolcon.colcon_core.event_reactor[0m [1;30mDEBUG[0m [32mjoining thread[0m
|
||||
[1.569s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
|
||||
[1.569s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
|
||||
[1.570s] [34mcolcon.colcon_core.plugin_system[0m [1;30mINFO[0m Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
|
||||
[1.570s] [34mcolcon.colcon_notification.desktop_notification[0m [1;30mINFO[0m Sending desktop notification using 'notify2'
|
||||
[1.571s] [34mcolcon.colcon_notification.desktop_notification.notify2[0m [1;30mDEBUG[0m [32mFailed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files[0m
|
||||
[1.571s] [34mcolcon.colcon_core.event_reactor[0m [1;30mDEBUG[0m [32mjoined thread[0m
|
||||
[1.572s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.ps1'
|
||||
[1.573s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_ps1.py'
|
||||
[1.574s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.ps1'
|
||||
[1.575s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.sh'
|
||||
[1.575s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_sh.py'
|
||||
[1.576s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.sh'
|
||||
[1.576s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.bash'
|
||||
[1.577s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.bash'
|
||||
[1.578s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix script '/home/jake/ros2_ws/install/local_setup.zsh'
|
||||
[1.578s] [34mcolcon.colcon_core.shell[0m [1;30mINFO[0m Creating prefix chain script '/home/jake/ros2_ws/install/setup.zsh'
|
||||
|
|
@ -1 +1 @@
|
|||
build_2025-11-09_16-50-27
|
||||
build_2025-11-09_19-38-47
|
||||
|
|
@ -2,36 +2,46 @@ from ament_index_python.packages import get_package_share_directory
|
|||
import os
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
from math import ceil
|
||||
from itertools import product
|
||||
from rknnlite.api import RKNNLite
|
||||
from sensor_msgs.msg import CompressedImage
|
||||
from cv_bridge import CvBridge
|
||||
|
||||
import time
|
||||
from camera_module.threaded_node import ThreadedNode
|
||||
|
||||
from std_msgs.msg import String
|
||||
import rclpy
|
||||
|
||||
from ament_index_python.packages import get_package_share_directory
|
||||
import os
|
||||
|
||||
package_name = 'camera_module'
|
||||
model_path = os.path.join(get_package_share_directory(package_name), 'resource', 'model', 'RetinaFace.rknn')
|
||||
|
||||
|
||||
|
||||
class CamPublisher(ThreadedNode):
|
||||
def __init__(self):
|
||||
def __init__(self, rknn, cap):
|
||||
super().__init__('camera_module', default_rate=5.0)
|
||||
self.string_pub = self.create_publisher(String, 'camera_module/cam_topic', 10)
|
||||
self.image_pub = self.create_publisher(CompressedImage, 'camera_module/compressed', 10)
|
||||
|
||||
# Try multiple device indices
|
||||
self.cap = None
|
||||
for i in range(5):
|
||||
cap = cv2.VideoCapture(i)
|
||||
if cap.isOpened():
|
||||
self.cap = cap
|
||||
self.get_logger().info(f'Opened webcam at index {i}')
|
||||
break
|
||||
self.face_detect_pub = self.create_publisher(String, 'camera_module/face_data', 10)
|
||||
self.rknn = rknn
|
||||
self.cap = cap
|
||||
self.latest_frame = None
|
||||
self.latest_faces = []
|
||||
self.model_size = (320, 320)
|
||||
self.priors = PriorBox(self.model_size)
|
||||
self.prev_time = time.time()
|
||||
|
||||
if self.cap is None:
|
||||
self.get_logger().error('Failed to open any webcam')
|
||||
|
||||
# Lower resolution
|
||||
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
|
||||
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
|
||||
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
|
||||
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
|
||||
|
||||
# Faster JPEG encoding
|
||||
|
||||
|
|
@ -40,40 +50,172 @@ class CamPublisher(ThreadedNode):
|
|||
|
||||
def on_tick(self):
|
||||
# Publish string message
|
||||
msg = String()
|
||||
msg.data = 'Cam from ROS 2!'
|
||||
self.string_pub.publish(msg)
|
||||
self.get_logger().info(f'Published: {msg.data}')
|
||||
# msg = String()
|
||||
# msg.data = 'Cam from ROS 2!'
|
||||
# self.string_pub.publish(msg)
|
||||
# self.get_logger().info(f'Published: {msg.data}')
|
||||
|
||||
# Capture and publish image
|
||||
if self.cap is None:
|
||||
self.get_logger().error('No webcam available')
|
||||
return
|
||||
|
||||
ret, frame = self.cap.read()
|
||||
if not ret or frame is None:
|
||||
self.get_logger().error('Camera read failed')
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
return
|
||||
img_height, img_width, _ = frame.shape
|
||||
letterbox_img, aspect_ratio, offset_x, offset_y = letterbox_resize(frame, self.model_size, 114)
|
||||
infer_img = np.expand_dims(letterbox_img.astype(np.uint8), axis=0)
|
||||
|
||||
outputs = rknn.inference(inputs=[infer_img])
|
||||
if outputs is None:
|
||||
return
|
||||
|
||||
try:
|
||||
msg = CompressedImage()
|
||||
msg.header.stamp = self.get_clock().now().to_msg()
|
||||
msg.format = 'jpeg'
|
||||
msg.data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])[1].tobytes()
|
||||
#msg.data = cv2.imencode('.jpg', frame)[1].tobytes()
|
||||
self.image_pub.publish(msg)
|
||||
self.get_logger().info('Published webcam frame')
|
||||
except Exception as e:
|
||||
self.get_logger().error(f'Failed to convert/publish image: {e}')
|
||||
loc, conf, landms = outputs
|
||||
boxes = box_decode(loc.squeeze(0), self.priors)
|
||||
boxes *= np.array([self.model_size[1], self.model_size[0], self.model_size[1], self.model_size[0]])
|
||||
boxes[:, 0::2] = np.clip((boxes[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
|
||||
boxes[:, 1::2] = np.clip((boxes[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
|
||||
|
||||
scores = conf.squeeze(0)[:, 1]
|
||||
landms = decode_landm(landms.squeeze(0), self.priors)
|
||||
landms *= np.tile(np.array([self.model_size[1], self.model_size[0]]), 5)
|
||||
landms[:, 0::2] = np.clip((landms[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
|
||||
landms[:, 1::2] = np.clip((landms[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
|
||||
|
||||
inds = np.where(scores > 0.2)[0]
|
||||
boxes, landms, scores = boxes[inds], landms[inds], scores[inds]
|
||||
order = scores.argsort()[::-1]
|
||||
boxes, landms, scores = boxes[order], landms[order], scores[order]
|
||||
|
||||
dets = np.hstack((boxes, scores[:, np.newaxis])).astype(np.float32)
|
||||
keep = nms(dets, 0.5)
|
||||
dets, landms = dets[keep], landms[keep]
|
||||
|
||||
face_data = []
|
||||
frame_center = np.array([img_width / 2, img_height / 2])
|
||||
|
||||
for data, landmark in zip(dets, landms):
|
||||
if data[4] < 0.6:
|
||||
continue
|
||||
x1, y1, x2, y2 = map(int, data[:4])
|
||||
conf = data[4]
|
||||
box_center = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
|
||||
offset = box_center - frame_center
|
||||
face_data.append({
|
||||
"box": [x1, y1, x2, y2],
|
||||
"confidence": float(conf),
|
||||
"offset_from_center": {
|
||||
"x": float(offset[0]),
|
||||
"y": float(offset[1])
|
||||
}
|
||||
})
|
||||
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
|
||||
cv2.putText(frame, f'{conf:.4f}', (x1, y1 + 12), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
|
||||
for j in range(5):
|
||||
lx, ly = map(int, landmark[j*2:j*2+2])
|
||||
cv2.circle(frame, (lx, ly), 1, (0, 255, 255), 2)
|
||||
|
||||
# cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30),
|
||||
# cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
|
||||
if len(face_data) > 0:
|
||||
print(face_data)
|
||||
self.face_detect_pub.publish(String(data=str(face_data)))
|
||||
ret, buffer = cv2.imencode('.jpg', frame)
|
||||
if ret:
|
||||
latest_frame = buffer.tobytes()
|
||||
latest_faces = face_data
|
||||
|
||||
def destroy_node(self):
|
||||
if self.cap:
|
||||
self.cap.release()
|
||||
super().destroy_node()
|
||||
|
||||
|
||||
# --- RetinaFace Utilities ---
|
||||
def letterbox_resize(image, size, bg_color):
|
||||
target_width, target_height = size
|
||||
image_height, image_width, _ = image.shape
|
||||
aspect_ratio = min(target_width / image_width, target_height / image_height)
|
||||
new_width = int(image_width * aspect_ratio)
|
||||
new_height = int(image_height * aspect_ratio)
|
||||
image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
|
||||
result_image = np.ones((target_height, target_width, 3), dtype=np.uint8) * bg_color
|
||||
offset_x = (target_width - new_width) // 2
|
||||
offset_y = (target_height - new_height) // 2
|
||||
result_image[offset_y:offset_y + new_height, offset_x:offset_x + new_width] = image
|
||||
return result_image, aspect_ratio, offset_x, offset_y
|
||||
|
||||
def PriorBox(image_size):
|
||||
anchors = []
|
||||
min_sizes = [[16, 32], [64, 128], [256, 512]]
|
||||
steps = [8, 16, 32]
|
||||
feature_maps = [[ceil(image_size[0] / step), ceil(image_size[1] / step)] for step in steps]
|
||||
for k, f in enumerate(feature_maps):
|
||||
min_sizes_ = min_sizes[k]
|
||||
for i, j in product(range(f[0]), range(f[1])):
|
||||
for min_size in min_sizes_:
|
||||
s_kx = min_size / image_size[1]
|
||||
s_ky = min_size / image_size[0]
|
||||
dense_cx = [x * steps[k] / image_size[1] for x in [j + 0.5]]
|
||||
dense_cy = [y * steps[k] / image_size[0] for y in [i + 0.5]]
|
||||
for cy, cx in product(dense_cy, dense_cx):
|
||||
anchors += [cx, cy, s_kx, s_ky]
|
||||
return np.array(anchors).reshape(-1, 4)
|
||||
|
||||
def box_decode(loc, priors):
|
||||
variances = [0.1, 0.2]
|
||||
boxes = np.concatenate((
|
||||
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
|
||||
priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1)
|
||||
boxes[:, :2] -= boxes[:, 2:] / 2
|
||||
boxes[:, 2:] += boxes[:, :2]
|
||||
return boxes
|
||||
|
||||
def decode_landm(pre, priors):
|
||||
variances = [0.1, 0.2]
|
||||
landmarks = np.concatenate((
|
||||
priors[:, :2] + pre[:, 0:2] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:],
|
||||
priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]
|
||||
), axis=1)
|
||||
return landmarks
|
||||
|
||||
def nms(dets, thresh):
|
||||
x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4]
|
||||
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
|
||||
order = scores.argsort()[::-1]
|
||||
keep = []
|
||||
while order.size > 0:
|
||||
i = order[0]
|
||||
keep.append(i)
|
||||
xx1 = np.maximum(x1[i], x1[order[1:]])
|
||||
yy1 = np.maximum(y1[i], y1[order[1:]])
|
||||
xx2 = np.minimum(x2[i], x2[order[1:]])
|
||||
yy2 = np.minimum(y2[i], y2[order[1:]])
|
||||
w = np.maximum(0.0, xx2 - xx1 + 1)
|
||||
h = np.maximum(0.0, yy2 - yy1 + 1)
|
||||
inter = w * h
|
||||
ovr = inter / (areas[i] + areas[order[1:]] - inter)
|
||||
inds = np.where(ovr <= thresh)[0]
|
||||
order = order[inds + 1]
|
||||
return keep
|
||||
|
||||
# --- RKNN Initialization ---
|
||||
rknn = RKNNLite()
|
||||
rknn.load_rknn(model_path)
|
||||
rknn.init_runtime()
|
||||
|
||||
# --- Shared State ---
|
||||
latest_frame = None
|
||||
latest_faces = []
|
||||
cap = cv2.VideoCapture(0)
|
||||
|
||||
def main():
|
||||
rclpy.init()
|
||||
node = CamPublisher()
|
||||
node = CamPublisher(rknn, cap)
|
||||
rclpy.spin(node)
|
||||
node.destroy_node()
|
||||
rclpy.shutdown()
|
||||
|
|
|
|||
Loading…
Reference in New Issue