系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
UvcCamera 这个轮子是日本人造的,GitHub的地址是:https://github.com/saki4510t/UVCCamera
里面有有四大块:1、libjpeg;2、libusb;3、libuvc;4、UVCCamera
咱们先按照业务代码的数据流程,来分析这个源码,我们刚介入新项目,面对一个代码工程,第一反应也是按照代码的业务逻辑,来一步步解读分析。后续再总结出每个代码块的作用
提示:以下是本篇文章正文内容,下面案例可供参考
一、nativeCreate
这个很简单,就是刚开始初始化,该创建的创建,该置空的置空,该clear的clear
二、nativeConnect
这个函数的主要作用:就是去连接上那个USB设备,创建好接收数据的线程,线程里有死循环,一直通过ioctl()函数读取数据,接收到数据后,通知preview端的线程去拿取、存储、解码、绘制,后面进行详解。这里面主要调用的函数是UVCCamera.cpp里面的connect函数
1.connect 函数
代码如下(示例):
/**
* カメラへ接続する
* Connect to the camera
*/
int UVCCamera::connect(int vid, int pid, int fd, int busnum, int devaddr, const char *usbfs) {
ENTER();
uvc_error_t result = UVC_ERROR_BUSY;
if (!mDeviceHandle && fd) {
if (mUsbFs)
free(mUsbFs);
mUsbFs = strdup(usbfs);
if (UNLIKELY(!mContext)) {
result = uvc_init2(&mContext, NULL, mUsbFs);
// libusb_set_debug(mContext->usb_ctx, LIBUSB_LOG_LEVEL_DEBUG);
if (UNLIKELY(result < 0)) {
LOGD("failed to init libuvc");
RETURN(result, int);
}
}
// カメラ機能フラグをクリア Clear the camera function flag
clearCameraParams();
fd = dup(fd);
// 指定したvid,idを持つデバイスを検索, 見つかれば0を返してmDeviceに見つかったデバイスをセットする(既に1回uvc_ref_deviceを呼んである)
//Search for the device with the specified vid and id, return 0 if found, and set the found device to mDevice (already called uvc_ref_device once)
// result = uvc_find_device2(mContext, &mDevice, vid, pid, NULL, fd);
result = uvc_get_device_with_fd(mContext, &mDevice, vid, pid, NULL, fd, busnum, devaddr);
if (LIKELY(!result)) {
// カメラのopen処理, Camera open processing
result = uvc_open(mDevice, &mDeviceHandle);
if (LIKELY(!result)) {
// open出来た時
#if LOCAL_DEBUG
uvc_print_diag(mDeviceHandle, stderr);
#endif
mFd = fd;
mStatusCallback = new UVCStatusCallback(mDeviceHandle);
mButtonCallback = new UVCButtonCallback(mDeviceHandle);
mPreview = new UVCPreview(mDeviceHandle);
} else {
// open出来なかった時
LOGE("could not open camera:err=%d", result);
uvc_unref_device(mDevice);
//If the reference counter is 0, mDevice is freed by uvc_unref_device, so it is unnecessary. XXX Crash, I want to try to destroy it again because it has already been destroyed.
// SAFE_DELETE(mDevice); // 参照カウンタが0ならuvc_unref_deviceでmDeviceがfreeされるから不要 XXX クラッシュ, 既に破棄されているのを再度破棄しようとしたからみたい
mDevice = NULL;
mDeviceHandle = NULL;
close(fd);
}
} else {
LOGE("could not find camera:err=%d", result);
close(fd);
}
} else {
// カメラが既にopenしている時
LOGW("camera is already opened. you should release first");
}
RETURN(result, int);
}
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。