用Opencv打造一台自动视觉目标跟踪系统

2023-05-16

平移/倾斜伺服装置,帮助摄像机使用视觉自动跟踪颜色对象。

  1. 简介

现在我们将使用我们的设备帮助相机自动跟踪颜色对象,如下所示:

OpenCV可免费用于学术和商业用途。它具有C ++,C,Python和Java接口,并支持Windows,Linux,Mac OS,iOS和Android。在我的一系列OpenCV教程中,我们将专注于Raspberry Pi(因此,Raspbian as OS)和Python。OpenCV专为提高计算效率而设计,专注于实时应用。因此,它非常适合物理计算项目!

2.安装OpenCV 3软件包

我正在使用Raspberry Pi V3更新到最新版本的Raspbian(Stretch),因此安装OpenCV的最佳方法是遵循Adrian Rosebrock开发的优秀教程:Raspbian Stretch:在Raspberry Pi上安装OpenCV 3 + Python 。

我尝试了几个不同的指南在我的Pi上安装OpenCV。阿德里安的教程是最好的。我建议你按照他的指导方针一步一步地做同样的事情。

完成Adrian的教程后,您应该准备好在您的Pi上运行我们的实验的OpenCV虚拟环境。

让我们转到我们的虚拟环境并确认OpenCV 3已正确安装。

Adrian建议每次打开新终端时运行命令“source”以确保系统变量已正确设置。

source ~/.profile

接下来,让我们进入我们的虚拟环境:

workon cv

如果您在提示符前面看到文本(cv),那么您就在cv virtualenvironment中:

(cv) pi@raspberry:~$

Adrian提请注意,cv Python虚拟环境完全独立,并与Raspbian Stretch下载中包含的默认Python版本隔离。因此,全局site-packages目录中的任何Python包都不可用于cv虚拟环境。同样,安装在cv的site-packages中的任何Python包都不可用于全局安装的Python。

现在,输入你的Python解释器:

python

并确认您运行的是3.5(或更高版本)版本

在解释器内部(将出现“>>>”),导入OpenCV库:

import cv2

如果没有出现错误消息,则在您的PYTHON VIRTUAL ENVIRONMENT上正确安装OpenCV。

您还可以检查安装的OpenCV版本:

cv2.__version__

应该出现3.3.0(或者可以在将来发布的高级版本)。上述终端PrintScreen显示前面的步骤。

3. Testing Your Camera

一旦你在RPi中安装了OpenCV,让我们测试你的相机是否正常工作。

我假设您的Raspberry Pi上已经安装了PiCam。

在IDE上输入以下Python代码:

import numpy as np

import cv2

cap = cv2.VideoCapture(0)while(True):

ret, frame = cap.read()

frame = cv2.flip(frame, -1) # Flip camera vertically

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cv2.imshow('frame', frame)

cv2.imshow('gray', gray)

if cv2.waitKey(1) & 0xFF == ord('q'):

breakcap.release()

cv2.destroyAllWindows()

上面的代码将捕获将由您的PiCam生成的视频流,以BGR颜色和灰色模式显示它们。

请注意,由于组装方式,我将相机垂直旋转。如果不是您的情况,请评论或删除“翻转”命令行。

您也可以从我的GitHub:https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/simpleCamTest.py下载代码

要执行,请输入命令:

python simpleCamTest.py

要完成程序,您必须按键盘上的[q] [Ctrl] + [C]键

图为结果。

4.使用OpenCV在Python中进行颜色检测

我们将尝试完成的一件事是检测和跟踪某个颜色对象。为此,我们必须更多地了解OpenCV如何解释颜色。

Henri Dang用OpenCV编写了一篇关于Python中的颜色检测的精彩教程。

通常,我们的相机将使用RGB颜色模式,可以通过将其视为可以由红色,绿色和蓝色的三种彩色灯制成的所有可能颜色来理解。我们将在这里使用BGR(蓝色,绿色,红色)。

如上所述,对于BGR,像素由3个参数表示,蓝色,绿色和红色。每个参数的值通常为0-255(或以十六进制表示的O到FF)。例如,计算机屏幕上的纯蓝色像素的B值为255,G值为0,R值为0。

OpenCV与HSV(色调,饱和度,值)颜色模型一起使用,它是RGB颜色模型的替代表示,由计算机图形学研究人员在20世纪70年代设计,以更加贴近人类视觉感知颜色制作属性的方式:

因此,如果要使用OpenCV跟踪某种颜色,则必须使用HSV模型对其进行定义。

假设我必须跟踪黄色物体,如上图所示的塑料盒。易用部分是找到它的BGR元素。您可以使用任何设计程序来查找它(我使用PowerPoint)。

在我的情况下,我发现:

蓝色:71

绿色:234

红色:213

接下来,我们必须将BGR(71,234,213)模型转换为HSV模型,该模型将使用上限和下限范围进行定义。为此,让我们运行以下代码:

import sys

import numpy as np

import cv2blue = sys.argv[1]

green = sys.argv[2]

red = sys.argv[3] color = np.uint8([[[blue, green, red]]])

hsv_color = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)

hue = hsv_color[0][0][0]print("Lower bound is :"),

print("[" + str(hue-10) + ", 100, 100]\n")

print("Upper bound is :"),

print("[" + str(hue + 10) + ", 255, 255]")

您也可以从我的GitHub下载代码:https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/bgr_hsv_converter.py

要执行,请输入以下命令,其中包含之前找到的BGR值作为参数:

python bgr_hsv_converter.py 71 234 213

程序将打印对象颜色的上下边界。

在这种情况下:

lower bound: [24, 100, 100]

upper bound: [44, 255, 255]

终端打印屏幕显示结果。

最后,但并非最不重要的,让我们看看OpenCV在确定其颜色后如何“掩盖”我们的对象:

import cv2

import numpy as np# Read the picure - The 1 means we want the image in BGR

img = cv2.imread('yellow_object.JPG', 1) # resize imag to 20% in each axis

img = cv2.resize(img, (0,0), fx=0.2, fy=0.2)# convert BGR image to a HSV image

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # NumPy to create arrays to hold lower and upper range

# The “dtype = np.uint8” means that data type is an 8 bit integer

lower_range = np.array([24, 100, 100], dtype=np.uint8)

upper_range = np.array([44, 255, 255], dtype=np.uint8)# create a mask for image

mask = cv2.inRange(hsv, lower_range, upper_range)# display both the mask and the image side-by-side

cv2.imshow('mask',mask)

cv2.imshow('image', img)# wait to user to press [ ESC ]

while(1):

k = cv2.waitKey(0)

if(k == 27):

breakcv2.destroyAllWindows()

您也可以从我的GitHub:https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/colorDetection.py下载代码

要执行,请在目录中输入以下命令,其中包含目标对象的照片(在我的情况下:yellow_object.JPG):

python colorDetection.py

上面的图片将显示原始图像(“图像”)以及在应用蒙版之后对象将如何显示(“蒙版”)。

5.物体移动跟踪

现在我们知道如何使用蒙版“选择”我们的对象,让我们使用相机实时跟踪它的移动。为此,我将我的代码基于Adrian Rosebrock的Ball Tracking with OpenCV教程。

我强烈建议您详细阅读Adrian的教程。

首先,确认您是否安装了imutils库。这是Adrian的OpenCV便利功能集合,可以更轻松地完成一些基本任务(如调整大小或翻转屏幕)。如果没有,请输入以下命令在虚拟Python环境中安装库:

pip install imutils

接下来,从我的GitHub下载代码https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/ball_tracking.py,并使用以下命令执行它:

python ball_traking.py

因此,您将看到类似于以下gif的内容:

基本上,除了“视频垂直翻转”之外,它与Adrian的代码相同,我用这条线:

frame = imutils.rotate(frame, angle=180)

另请注意,使用的掩码边界是我们在上一步中获得的掩码边界。

6.测试GPIO

现在我们已经使用了OpenCV的基础知识,让我们为我们的RPi安装一个LED并开始与我们的GPIO进行交互。

按照上面的电气图:LED的阴极将通过一个220欧姆的电阻连接到GPIO 21,其阳极连接到GND。

让我们在虚拟Python环境中测试我们的LED。

请记住,在Python虚拟环境中可能没有安装RPi.GPIO!要解决此问题,一旦您在那里(记得确认(cv)在您的终端中),您需要使用pip将其安装到您的虚拟环境中:

pip install RPi.GPIO

让我们使用python脚本执行一个简单的测试:

import sys

import time

import RPi.GPIO as GPIO# initialize GPIO and variables

redLed = int(sys.argv[1])

freq = int(sys.argv[2])

GPIO.setmode(GPIO.BCM)

GPIO.setup(redLed, GPIO.OUT)

GPIO.setwarnings(False)print("\n [INFO] Blinking LED (5 times) connected at GPIO {0} \

at every {1} second(s)".format(redLed, freq))

for i in range(5):

GPIO.output(redLed, GPIO.LOW)

time.sleep(freq)

GPIO.output(redLed, GPIO.HIGH)

time.sleep(freq)# do a bit of cleanup

print("\n [INFO] Exiting Program and cleanup stuff \n")

GPIO.cleanup()

此代码将接收GPIO编号作为参数,以及LED应闪烁的频率(以秒为单位)。LED将闪烁5次,程序将终止。请注意,在终止之前,我们将释放GPIO。

因此,要执行脚本,必须输入参数,LED GPIO和频率。

例如:

python LED_simple_test.py 21 1

上述命令将每隔“1”秒闪烁5次连接到“GPIO 21”的红色LED。

可以从我的GitHub下载文件https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/GPIO_LED_test.py

上面的终端打印屏幕显示结果(当然您应该确认LED闪烁。

现在,让我们使用OpenCV和一些基本的GPIO。

7.识别颜色和GPIO交互

让我们开始将我们的OpenCV代码与GPIO交互集成。我们将从最后的OpenCV代码开始,我们将在其上集成GPIO-RPI库,因此我们将在相机找到彩色物体的任何时候打开红色LED。此步骤中使用的代码基于Adrian的优秀教程OpenCV,RPi.GPIO和Raspberry Pi上的GPIO Zero:

首先要做的是“创建”我们的LED,将其连接到特定的GPIO:

import RPi.GPIO as GPIO

redLed = 21

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(redLed, GPIO.OUT)

其次,我们必须初始化我们的LED(关闭):

GPIO.output(redLed, GPIO.LOW)

ledOn = False

现在,在循环内部,当找到对象时创建“圆圈”,我们将打开LED:

GPIO.output(redLed, GPIO.HIGH)

ledOn = True

让我们从我的GitHub下载完整的代码:

https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/object_detection_LED.py

使用以下命令运行代码:

python object_detection_LED.py

结果如下。请注意,每次检测到物体时,LED(左下角)都会亮起:

尝试使用不同的对象(颜色和格式)。您将看到,一旦掩模边界内的颜色匹配,LED就会亮起。

以下视频显示了一些经验。请注意,只会检测到位于颜色范围内的黄色物体,从而打开LED。忽略具有不同颜色的对象。

我们只在这里使用LED,如上一步所述。当我拍摄视频时,我的Pan Tilt已经组装完毕,所以请忽略它。我们将在下一步处理PAN / TILT机制。

8.泛倾斜机制

现在我们已经使用了OpenCV和GPIO的基础知识,让我们安装我们的Pan / tilt机制。

伺服电机应连接到外部5V电源,其数据引脚(在我的情况下,它们的黄色接线)连接到Raspberry Pi GPIO,如下所示:

GPIO 17 ==>倾斜伺服

GPIO 27 ==> Pan Servo

不要忘记将GND连接在一起==> Raspberry Pi - Servos - 外部电源)

您可以选择在Raspberry Pi GPIO和服务器数据输入引脚之间串联一个1K欧姆的电阻。这可以在发生伺服问题时保护您的RPi。

让我们也利用这个机会,在我们的虚拟Python环境中测试我们的伺服器。

让我们使用Python脚本用我们的驱动程序执行一些测试:

from time import sleep

import RPi.GPIO as GPIOGPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)def setServoAngle(servo, angle):

pwm = GPIO.PWM(servo, 50)

pwm.start(8)

dutyCycle = angle / 18. + 3.

pwm.ChangeDutyCycle(dutyCycle)

sleep(0.3)

pwm.stop()if __name__ == '__main__':

import sys

servo = int(sys.argv[1])

GPIO.setup(servo, GPIO.OUT)

setServoAngle(servo, int(sys.argv[2]))

GPIO.cleanup()

上面代码的核心是函数setServoAngle(伺服,角度)。该功能接收伺服GPIO编号作为参数,以及伺服必须定位的角度值。一旦此函数的输入为“角度”,我们必须将其转换为等效的占空比。

要执行脚本,必须输入参数,伺服GPIO和角度。

例如:

python angleServoCtrl.py 17 45

上述命令将连接在GPIO 17上的伺服(“倾斜”)与“仰角”成45度。

文件

https://github.com/Mjrovai/OpenCV-Object-Face-Tracking/blob/master/angleServoCtrl.py

可以从我的GitHub下载

9.查找对象实时位置

这里的想法是使用平移/倾斜机制将对象定位在屏幕中间。坏消息是,为了开始我们必须实时知道对象的位置。但好消息是,一旦我们已经拥有了对象中心的坐标,这很容易。

首先,让我们使用之前使用的“object_detect_LED”代码并修改它以打印已创建对象的x,y坐标。

从我的GitHub下载代码:objectDetectCoord.py

代码的“核心”是我们找到对象并在其上绘制一个圆圈的部分,其中心有一个红点。

# only proceed if the radius meets a minimum size

if radius > 10:

# draw the circle and centroid on the frame,

# then update the list of tracked points

cv2.circle(frame, (int(x), int(y)), int(radius),

(0, 255, 255), 2)

cv2.circle(frame, center, 5, (0, 0, 255), -1)

# print center of circle coordinates

mapObjectPosition(int(x), int(y))

# if the led is not already on, turn the LED on

if not ledOn:

GPIO.output(redLed, GPIO.HIGH)

ledOn = True

让我们将中心坐标“导出”到mapObjectPosition(int(x),int(y))函数以打印其坐标。功能下方:

def mapObjectPosition (x, y):

print ("[INFO] Object Center coordinates at \

X0 = {0} and Y0 = {1}".format(x, y))

运行程序,我们将在终端上看到(x,y)位置坐标,如上所示。移动对象并观察坐标。我们将意识到x从0到500(从左到右),y从o到350(从上到下)。见上图。

现在我们必须使用这些坐标作为我们的Pan / Tilt跟踪系统的起点

10.物体位置跟踪系统

我们希望我们的对象始终以屏幕为中心。所以,让我们定义一个例子,如果符合以下情况我们会认为我们的对象是“居中的”:

220 <x <280

160 <y <210

在这些边界之外,我们必须移动我们的Pan / Tilt机制以补偿偏差。基于此,我们可以构建函数mapServoPosition(x,y),如下所示。请注意,此函数中用作参数的“x”和“y”与我们之前用于打印中心位置的参数相同:

# position servos to present object at center of the frame

def mapServoPosition (x, y):

global panAngle

global tiltAngle

if (x < 220):

panAngle += 10

if panAngle > 140:

panAngle = 140

positionServo (panServo, panAngle)

if (x > 280):

panAngle -= 10

if panAngle < 40:

panAngle = 40

positionServo (panServo, panAngle)

if (y < 160):

tiltAngle += 10

if tiltAngle > 140:

tiltAngle = 140

positionServo (tiltServo, tiltAngle)

if (y > 210):

tiltAngle -= 10

if tiltAngle < 40:

tiltAngle = 40

positionServo (tiltServo, tiltAngle)

基于(x,y)坐标,使用函数positionServo(伺服,角度)生成伺服位置命令。例如,假设y位置是“50”,这意味着我们的对象几乎位于屏幕的顶部,可以转换为“相机视线”为“低”(假设倾角为120度) 所以我们必须“减少”倾斜角度(让我们说100度),所以相机视线将“向上”并且物体将在屏幕上“向下”(y将增加,比方说,190)。

上图显示了几何方面的示例。

想想泛相机将如何操作。请注意,屏幕没有镜像,这意味着如果您将对象移动到“左侧”,一旦您与相机相反,它将在屏幕上移动“右侧”。

函数positionServo(伺服,角度)可写为:

def positionServo (servo, angle):

os.system("python angleServoCtrl.py " + str(servo) + " " +

str(angle))

print("[INFO] Positioning servo at GPIO {0} to {1} \

degrees\n".format(servo, angle))

我们将调用之前显示的脚本进行伺服定位。

请注意,angleServoCtrl.py必须与objectDetectTrac.py位于同一目录中

完整的代码可以从我的GitHub:objectDetectTrack.py下载

下面的gif显示了我们项目工作的一个例子:

11.结论

一如既往,我希望这个项目可以帮助其他人进入激动人心的电子世界!

相关整套源码关注微信公众号:“图像算法”或者微信搜索账号imalg_cn关注公众号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Opencv打造一台自动视觉目标跟踪系统 的相关文章

  • 深度估计的准确性 - 立体视觉

    我正在研究立体视觉 我对这个问题的深度估计的准确性感兴趣 这取决于几个因素 例如 适当的立体校准 旋转 平移和失真提取 图像分辨率 相机和镜头质量 失真越小 色彩捕捉正确 两个图像之间的匹配特征 假设我们没有低成本的相机和镜头 没有廉价的网
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • 旋转矩阵openCV

    我想知道如何找到框架中一组特征的旋转矩阵 我会更具体 我有 2 个具有 20 个特征的帧 假设第 1 帧和第 2 帧 我可以估计两个帧中特征的位置 例如 假设位置 x y 处的某个第 1 帧特征 并且我确切地知道它在哪里 所以假设为 x y
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • 如何用OpenCV解决图像处理相机IO延迟

    我有一个 OpenCV 程序 其工作原理如下 VideoCapture cap 0 Mat frame while true cap gt gt frame myprocess frame 问题是如果myprocess耗时较长 超过相机的I
  • C++ OpenCV 3.4 / FFMPEG 3.4.1 VideoWriter 和 MP4 输出文件格式

    我正在运行 Linux 内核 4 9 35 ti r44 的 ARM BeagleBone X 15 Debian 机器 在我的 C Qt 5 应用程序中 我想将 cv Mat 帧保存为 MP4 格式视频 我安装了 libx264 并从头开
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • 车辆分割和跟踪

    我已经从事一个项目一段时间了 目的是在无人机捕获的视频中检测和跟踪 移动 车辆 目前我正在使用 SVM 该 SVM 接受了从车辆和背景图像中提取的局部特征的特征袋表示的训练 然后 我使用滑动窗口检测方法来尝试定位图像中的车辆 然后我想要跟踪
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • 尝试使使用 OpenCV 的 java 应用程序(可执行 Jar)可移植。出现不满意的链接错误

    我制作了一个应用程序 用于从网络摄像头抓取视频并使用 OpenCV 和 JavaCV 检测运动 我正在尝试使用 eclipse 导出为可执行 jar 该程序在 eclipse 中运行良好 就像我编写该程序的计算机上的 exe jar 一样
  • 如何计算 cv::Mat 的步幅

    我想知道如何计算步幅cv Mat 我已经更新了代码 我需要计算步幅 我不知道计算投影变换有什么问题 我得到一个cv Mat然后将其复制到unsigned int数组 然后对其进行转换 然后返回一个cv Mat待展示 cv Mat3b src
  • OpenCV 2.4.3rc 和 CUDA 4.2:“OpenCV 错误:没有 GPU 支持”

    我在这张专辑中上传了几张截图 https i stack imgur com TELST jpg https i stack imgur com TELST jpg 我正在尝试在 Visual Studio 2008 中的 OpenCV 中
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • IplImage 内的 IplImage

    是否可以使用 OpenCv JavaCv 将图像放置在图像内 例如我有一个 1000x1000 图像和一个 100x100 图像 在 600x600 的位置 我想将较小的图像放置在较大的图像内 假设蓝色框是 1000x1000 IplIma
  • opencv:如何将所有黑色像素转换为透明并将其保存到png文件

    如下图 我希望所有黑色像素都是透明的并将其保存为 png 文件 您可以像这样快速完成并矢量化 import cv2 import numpy as np Load image as Numpy array in BGR order na c
  • 使用 Xcode 为 OS X Lion / Mountain Lion 编译 OpenCV (2.3.1+)

    谁能给我提供一些如何使用 Xcode 在 OS X Lion 上编译 OpenCV 2 3 1 的详细指南 我对此很生气 我得到了源代码 使用 cmake 创建 Xcode 模板并尝试构建它 但它失败并出现大约 200 个错误 提前致谢 多
  • 如何在 OpenCV 中删除 mouseCallback

    在使用 C 的 OpenCV 中 有没有办法删除 mouseHandler int event int x int y int flags void param 通过函数添加到窗口 image window cv setMouseCallb

随机推荐

  • 树莓派3 Ubuntu Meta16.04 操作系统烧录教程及系统换源

    树莓派3 Ubuntu Meta16 04 操作系统烧录教程及系统换源 1 写在开头 xff1a 2 操作系统烧录软件下载3 Ubuntu Meta 操作系统下载4 操作系统烧录4 1 SD 存储卡格式化4 2 操作系统写入4 3 换源更新
  • Ubuntu nautilus 快速打开文件浏览器

    Ubuntu nautilus 快速打开文件浏览器 1 问题描述2 nautilus 命令说明3 bashrc 下使用 alias 创建命令别名Reference 测试时间 xff1a 2022年6月20日 测试平台 xff1a Ubunt
  • 结构体嵌套结构体,及其的初始化

    作用 xff1a 结构体的的参数成员包含另一个结构体 利用 操作符来逐级访问结构体中的元素 1 先来个普通的结构体嵌套 xff0c xff08 不涉及数组 xff09 span class token macro property span
  • Spark Streaming + Spark SQL 实现配置化ETL流程

    Spark Streaming 非常适合ETL 但是其开发模块化程度不高 xff0c 所以这里提供了一套方案 xff0c 该方案提供了新的API用于开发Spark Streaming程序 xff0c 同时也实现了模块化 xff0c 配置化
  • 程序员永远的痛之字符编码的奥秘

    字符编码相信是每个程序员的噩梦 xff0c 只要是有中文的地方 xff0c 总是会遇到各种编码的问题 xff0c 并且这种问题还非常难缠 xff0c 尤其在linux上 xff0c 因为上面很多软件都是针对英语国家开发的 xff0c 是不会
  • 2013年终总结

    年终感悟 xff1a 2013年就这样过去了 xff0c 每个人都一样 xff0c 使用了自己一年生命药水 xff0c 要知道这种药品是花多少钱都买不来的 现在回头看看 xff0c 我用这一瓶药水都做了那些事情 在这一年里 xff0c 有过
  • C++11 之for 新解

    前言 C 43 43 11这次的更新带来了令很多C 43 43 程序员期待已久的for range循环 xff0c 每次看到javascript xff0c lua里的for range xff0c 心想要是C 43 43 能有多好 xff
  • c++11之初始化列表

    一 前言 C 43 43 的学习中 xff0c 我想每个人都被变量定义和申明折磨过 xff0c 比如我在大学笔试过的几家公司 xff0c 都考察了const和变量 xff0c 类型的不同排列组合 xff0c 让你区别有啥不同 反正在学习C
  • Unity Update 详解

    0x01 简介 Unity的脚本继承了Monobehaviour类 xff0c 在脚本中定义函数 xff1a void FixedUpdate span class hljs list span void span class hljs k
  • 2016总结

    欲言又止 xff1a 每年的年终总结是要在新年之前发表在博客上 xff0c 今年的年终总结拖到现在完成 xff0c 我也是服自己 这里要感谢我的高中好友 64 万学清同学 xff0c 在我去年微信发表的有关年终总结的朋友圈下 xff0c 催
  • 阅读代码和修改别人代码的一些技巧以及注意事项

    作为刚刚走上工作岗位的fish xff0c 都要熟悉前辈们留下来的代码 这段时间是fish最痛苦的时间同时也是最轻松的时间 痛苦是因为要看大量的代码 xff0c 同时要慢慢从学生到社会人士的转变 xff08 xff0c 再不能睡懒觉了 xf
  • 一个分号引发的血案

    最近在看 Data Structures and Algorithms 这本书 xff0c 书里对数据结构和算法进行了简单的描述 xff0c 并且用伪码进行了实现 伪码毕竟和代码还是有很大不同的 xff0c 书的说明里说有C 写的源码 xf
  • Iphone客户端程序员半年工作总结

    来公司四个半月了 xff0c 从对客户端游戏编程的小白慢慢的也能写一些东西了 xff0c 当然了这里最感谢的人就是九天了 xff0c 对于九天其它的好我就不说了 xff0c 就是感觉九天为了团队 xff0c 为了项目 xff0c 他在很用心
  • Unity Android Activity控制

    前言 开发游戏 xff0c 在国内发行 xff0c 接入各个渠道SDK是一件绕不开的事情 并且这件事非常复杂琐碎 xff0c 原因如下 xff1a a 发行平台多 xff0c Android平台有30 xff0c 40家主流发行平台 b 每
  • MongoDB ODM 框架MongoMongo-简化你的数据存储

    MongMongo是一个用Java写的ODM框架 xff0c 使得对MongoDB的操作更加便捷 MongoMongo努力为Java开发者提供类似于ActiveORM 或者 Hibernate的操作API 并且保留了MongoDB的sche
  • Unity Android 加载动态库

    前言 在接入360 Android SDK时遇到在有些机型的Android机器上报错 xff0c 具体错误提示为 xff1a Failure to initialize Your hardware does not support this
  • 德鲁克谈《自我管理》笔记摘要

    一 我的长处是什么 多数人都以为他们知道自己擅长什么 xff0c 其实不然 要发现自己的长处 xff0c 唯一的途径就是分析回馈法 写下自己预期的结果 9 12个月后 xff0c 将实际结果和预期比较 总结改善自己的预期和行动 我们要以持之
  • ubuntu下搭建cocos2dx编程环境-上

    这大半年一直在开发flash游戏 xff0c 用到的编程语言是actionscript和c 43 43 所以这次公司决定开发手游端的话 xff0c C 43 43 不是很生疏 xff0c 这是个好消息 坏消息是由于现在网页游戏还没有上线 x
  • netty使用epoll报错:java.lang.UnsatisfiedLinkError: failed to load the required native library

    Caused by java lang UnsatisfiedLinkError could not load a native library netty transport native epoll x86 64 最近修改moquett
  • 用Opencv打造一台自动视觉目标跟踪系统

    平移 倾斜伺服装置 xff0c 帮助摄像机使用视觉自动跟踪颜色对象 简介 现在我们将使用我们的设备帮助相机自动跟踪颜色对象 xff0c 如下所示 xff1a OpenCV可免费用于学术和商业用途 它具有C 43 43 xff0c C xff