python imagefont truetype Python ImageFont TrueType:一个字体问题,让我的视觉系统在真实世界直接崩了
于受控情形里, 一切瞧着皆为正确, 模型展现良好, 检测成果稳定, 流水线行为恰似预期, 而后你迈进真实世界, 系统开端以难以阐释的样式失败, 先前易于检测的物体于稍有不同的光照下消逝不见, 边缘变得不稳定, 噪声闪现于开发时看似干净的区域。极为让人郁闷难过的是, 模型一般并非根源所在。于好多情形下, 问题起始于流水线里更早的阶段, 也就是原始传感器输入的层面。这是视觉系统中往往被低估的部分。1、什么是PupilPupil, 它属于Skill的那部分里专用于图像处理, 此模块呢会去处理那些处于原始相机输入跟检测、分割还有跟踪等一系列高级感知系统之间涉及的低级操作。并非是Pupil引入另一个是以学习为依据的模型, 相反, 它着重于更为基础层面的事情,即将那种进行图形类数据致使其处于稳定状态, 并且使其具备结构化特征, 进而让其变得更有助于进行合理推断。它针对滤波, 还有增强, 以及几何变换, 包括色彩空间操作, 还有基本特征提取等核心操作, 给出一直相符的接口。其目标十分单纯: 提升信号质量, 让下游系统于真实世界情形下展现得更加可靠。一个最小示例from telekinesis import pupil from datatypes import datatypes, io # Load an image image io.load_image(filepathdatatypes.String(path/to/image.jpg)) # Apply Gaussian blur blurred_image pupil.filter_image_using_gaussian_blur( imageimage, kernel_sizedatatypes.Int(5), sigma_xdatatypes.Float(1.0) ) # Save the result io.save_image(imageblurred_image, filepathdatatypes.String(output.jpg))2、图像滤波在”Pupil“里图像进行去噪平滑处理, 着重于让原本的传感器所给出的输入, 在进入例如目标检测或者分割这类更高级的感知组件之前, 能变得愈发平稳。Gabor滤波 示例from telekinesis import pupil filtered_image pupil.filter_image_using_gabor( imageimage, kernel_size21, standard_deviation5.0, orientation0.0, wavelength10.0, aspect_ratio0.5, phase_offset0.0, )它涵盖标准的平滑技术, 像高斯、中值以及双边滤波, 能够助力降低传感器噪声, 与此同时, 把重要结构保留下来。中值模糊和高斯模糊 示例from telekinesis import pupil filtered_image pupil.filter_image_using_median_blur( imageimage, kernel_size5, ) from telekinesis import pupil blurred_image pupil.filter_image_using_gaussian_blur( imageimage, kernel_size7, sigma_x3.0, sigma_y3.0, border_typedefault, )Pupil除了具有基本平滑, 还展现出了对于边缘敏感以及结构感知的滤波器, 像Sobel、、和Gabor这类, 它们适用于从事提取梯度、纹理与方向模式的工作。滤波示例from telekinesis import pupil gradient_image pupil.filter_image_using_scharr( imageimage, dx1, dy0, scale1.0, delta0.0, output_format64bit, border_typedefault, )更为专业的滤波器, 像是或基于某种的方法, 会把它往其他方向进一步扩展, 一直到结构化特征检测这个范畴, 其中涵盖了管状区域以及脊状区域。滤波 示例from telekinesis import pupil vessels pupil.filter_image_using_hessian( imageimage, scale_start1, scale_end10, scale_step2, detect_black_ridgesTrue, border_typereflect, constant_value0.0, )实践里, 这些操作被用来让视觉信号于帧之间变得愈发统一, 尤其是在那种噪声以及光照变化无法避免的环境当中。形态学黑帽 示例from telekinesis import pupil filtered_image pupil.filter_image_using_morphological_blackhat( imageimage, kernel_size15, kernel_shapeellipse, iterations1, border_typedefault, )3、图像增强解决不同问题的Pupil中的图像增强, 并非针对噪声, 而是关乎在变化条件下的可见性, 以及一致性。CLAHE 示例from telekinesis import pupil enhanced_image pupil.enhance_image_using_clahe( imageimage, clip_limit10.0, tile_grid_size4, color_spacelab, )CLAHE这般的技术, 能够改进不均匀光照环境里头的局部对比度, 致使隐藏的细节变得更易见, 且不会过度放大全局亮度。Gamma校正给予了对整体亮度的可控调整, 而白平衡校正消除了不同光源所引入的不必要色偏。Gamma校正 示例from telekinesis import pupil corrected_image pupil.enhance_image_using_auto_gamma_correction( imageimage )白平衡 示例from telekinesis import pupil balanced_image pupil.enhance_image_using_white_balance(imageimage)在机器人领域, 这些方法尤为重要, 原因在于真实世界的环境极少会给出毫无差异保持一致的光线照明情况。这种增强的做法能够对输入起到标准化的作用, 进而使得下游的模型无需自身去进行那些变化方面的弥补行为。4、裁剪Pupil里的裁剪, 不单单只是用于调整区域大小的工具, 它还是一种能够定义图像里真正关键部分的方式。边界框裁剪 示例from telekinesis import pupil cropped_images pupil.crop_image_using_bounding_boxes( imageimage, bounding_boxesbounding_boxes, retain_coordinatesFalse, ) crop_list cropped_images.to_list()此库具备支持, 基于中心的裁剪, 边界框提取, 还有基于多边形的掩码, 其允许进行精确隔离, 关乎感兴趣区域。这于机器人设置里, 尤为有用, 缘由在于, 仅图像的一小部分, 涵盖可操作信息, 诸如杂乱箱内的物体, 或者传送带上的目标区域。图像中心裁剪 示例from telekinesis import pupil cropped_image pupil.crop_image_center( imageimage, crop_width256, crop_height256, pad_value0, )裁剪, 它把处理区域缩减至相关区域之上, 如此一来, 它提升了效率, 它还降低了没必要的计算。5、几何变换学习者中的几何变换, 对图像进行空间方面的修改, 并且在修改的同时, 将结构含义予以保留旋转图像 示例from telekinesis import pupil rotated_image pupil.rotate_image( imageimage, angle_in_deg33.0, interpolation_methodlinear, keep_image_sizeTrue, )涵盖了带有或者不带有纵横比限定的缩放情况, 还有旋转, 以及平移, 再者是填充, 另外还有基于金字塔的缩放。平移图像 示例from telekinesis import pupil translated_image pupil.translate_image( imageimage, dx50, dy-30, border_typeconstant, fill_value0, interpolation_methodlinear, )这些操作, 常常被用以对不同相机系统的输入予以标准化, 或者增强训练数据, 又或者使图像契合下游模型的预期输入格式。在机器人应用里, 它们于对齐视角以及补偿相机放置或者朝向变化等方面, 同样发挥着作用。6、色彩空间变换采用, 把亮度和颜色这个所谓的信息予以分离办法的色彩空间变换, 给出了一种, 更为稳健的用于解释那样一种视觉数据的方式。转换为灰度 示例from telekinesis import pupil converted_image pupil.convert_image_color_space( imageimage, source_color_spaceBGR, target_color_spaceRGBA, )眼睛的瞳孔部分, 支持红、绿、蓝表示, 色相、饱和度、明度表示, 明度、绿红、蓝黄表示, 以及亮度、蓝色差、红色差等, 这种常见表示之间的转换操作, 还有用于把通道分隔开和合并起来的工具, 以及用来标准规范强度分布情况的工具。许多感知任务在直接操作 RGB 空间时对于光照变化敏感, 所以这种分离颇为重要, 在替代色彩空间里进行工作, 对分割以及检测任务的稳定性通常能够起到提升作用, 尤其是在不受控环境当中。7、位运算Pupil里的位运算去直接操作像素级的那种表示, 进而让它有适用于掩码操作以及图像合成的特性。图像差分 示例from telekinesis import pupil result pupil.bitwise_difference_images(image_1image, image_2image_2)包含 AND、OR、XOR 及差分操作等的这类功能, 使得二进制掩码能够实现组合或者比较。而反转以及加权叠加这两项操作, 又在可视化以及合成工作流等方面将其做了进一步的扩展。位运算OR 示例from telekinesis import pupil result pupil.bitwise_or_images(image_1image, image_2image_2)位运算NOT 示例from telekinesis import pupil result pupil.bitwise_not_image(imageimage)这些操作常常被用于流水线的分割, 在这当中, 存在着多个掩码, 或者有预测需要随着时间进行合并, 进行精炼, 还要进行比较。8、世界空间与像素空间之间的投影Pupil里的投影工具, 把2D图像空间跟3D空间表示关联起来了。from telekinesis import pupil import numpy as np from loguru import logger # Camera intrinsics (obtained from camera calibration) camera_intrinsics np.array( [[500.0, 0, 320.0], [0, 500.0, 240.0], [0, 0, 1.0]], dtypenp.float64, ) # Distortion coefficients for camera lens distortion_coefficients np.array([0.0, 0.0, 0.0, 0.0, 0.0], dtypenp.float64) pixel np.array([320.0, 240.0], dtypenp.float64) depth 1.0 world_T_camera np.eye(4, dtypenp.float64) world_T_camera[2, 3] 1.0 # Project pixel to world coordinates world_T_point pupil.project_pixel_to_world_point( camera_intrinsicscamera_intrinsics, distortion_coefficientsdistortion_coefficients, pixelpixel, depthdepth, world_T_cameraworld_T_camera, ) logger.success( Projected pixel to world point. world_T_point shape: {}, np.asarray(world_T_point.matrix).shape if hasattr(world_T_point, matrix) else N/A, )该库具备这样的功能, 其一, 是利用深度信息把点从像素坐标投射到相机坐标以及世界坐标, 其二, 是从3D空间朝着相反方向投影使其回到图像平面, 是有这样两方面的情况的。这种能力于机器人系统里极为关键, 缘于感知得转化为物理交互。此投影在抓取方面、导航方面以及场景理解方面组成了相机所看到的与机器人能够做的事情之间那桥啊。这些投影构成了相机所见跟机器人所能做之间的桥梁, 不管是在抓取环节、导航环节、场景理解环节。