使用sqlite保存人脸特征
需求
在做人脸识别的时候,需要在嵌入式端保存底库人脸的特征,我自然想到了sqlite。
每个人至少要保存两个字段,一个id, 一个特征。其中id我计划用char类型,人脸特征用blob类型,也就是二进制类型。这样我就可以直接把c 里的数据直接存储到sqlite的文件里。
创建table
std::string strCmd = "create table strTableName (idstr char PRIMARY KEY, feature BLOB NOT NULL)";
sqlite3_exec(DataBase, strCmd.c_str(), 0, 0, &error);
查询
查询的方法可以从参考资料里的《SQLite学习笔记(八)-- BLOB数据的插入与查询(C 实现)》和《SQLite C / C 接口简介》里看到具体的例子。
这里只贴一段读取特征的代码
const void *pReadBolbData = sqlite3_column_blob(stmt, 1);
if (pReadBolbData == NULL)
{
printf("error info:[%s]\n", sqlite3_errmsg(m_DataBase));
retcode = -1;
break;
}
auto len = sqlite3_column_bytes(stmt, 2);
memcpy(featureptr, pReadBolbData, len);
我这里想说,使用sqlite3_prepare() sqlite3_step()是非常优雅的一种方式,比那种回调的方式要好的多。
比如下方我想要查询一个table是否存在,实现会很简单:
bool IsTableExist(const std::string &strTableName)
{
int table_num = 0;
sqlite3_stmt *stmt;
std::string strFindTable = "SELECT COUNT(*) FROM sqlite_master where type ='table' and name ='" strTableName "'";
sqlite3_prepare_v2(m_DataBase, strFindTable.c_str(), strFindTable.size(), &stmt, 0);
int result = sqlite3_step(stmt);
if (result == SQLITE_ROW)
{
table_num = sqlite3_column_int(stmt, 0);
}
sqlite3_finalize(stmt);
return table_num > 0;
};
参考资料
SQLite学习笔记(八)-- BLOB数据的插入与查询(C 实现)
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbacac
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01