Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FaceDetection
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guanghui.cui
FaceDetection
Commits
d7f9856a
Commit
d7f9856a
authored
Mar 01, 2018
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、广告写入到sqlite数据库
2、广告接口对接
parent
2624bad5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
165 additions
and
47 deletions
+165
-47
.gitignore
+13
-0
FaceDetection/FaceDetection.cpp
+75
-2
FaceDetection/utility/SQLiteModule.cpp
+53
-33
FaceDetection/utility/SQLiteModule.h
+10
-1
FaceDetection/utility/jsonAnalysis.cpp
+11
-11
Release/config.ini
+3
-0
Release/fmdata.db
+0
-0
No files found.
.gitignore
0 → 100644
View file @
d7f9856a
/relyLibrarys/
/ipch/
*.tlog
*.log
*.obj
*.iobj
*.pdb
*.ipdb
*.pch
*.ilk
*.suo
*.idb
\ No newline at end of file
FaceDetection/FaceDetection.cpp
View file @
d7f9856a
...
...
@@ -22,6 +22,7 @@
#include "curl/curl.h"
#include "utility/threadpool.h"
#include "utility/SQLiteModule.h"
#include "utility/iniOperation.h"
INITIALIZE_EASYLOGGINGPP
//using namespace cv;
using
namespace
std
;
...
...
@@ -51,10 +52,13 @@ using namespace std;
全局变量定义
****************************************/
std
::
string
strUrl
=
"http://139.196.195.9:8788/facesearch/search4File"
;
//接口URL
std
::
string
strAdUrl
=
"http://www.eastjw.com:7000/FamilyInterfaceProject/familyInterface/addFamilyData"
;
//广告URL
std
::
vector
<
TargetInfo
>
track_dets
;
//跟踪目标所在位置
CvxText
text
(
"kaiti.ttf"
);
//字库,否则不支持中文
int64
time_start
=
cv
::
getTickCount
(),
time_end
;
//时间戳,用于计算视频播放帧率
int
fps
=
0
;
//帧率
std
::
vector
<
adStruct
>
vecADInfos
;
//广告信息
std
::
string
strDeviceId
;
//广告设备id
/****************************************
函数声明
...
...
@@ -77,6 +81,11 @@ void reqUserInfoByImg(int index, string &imgPath);
//更新图片文字显示
void
update_img_text
(
cv
::
Mat
&
image
,
int
iframe
,
int
target
);
//获取广告信息,缓存到本地
void
get_adInfo
(
std
::
vector
<
adStruct
>
&
vecInfo
);
// 广告播放推送
CURLcode
curl_post_ad
(
const
string
&
url
,
const
string
equipmentId
,
const
string
productId
,
string
&
response
);
/****************************************
主函数
...
...
@@ -85,11 +94,22 @@ int main()
{
try
{
SQLite
sqlite
;
sqlite
.
initSQLite
();
LOG
(
INFO
)
<<
"**************START PROCESS****************"
;
// 读取配置文件信息
std
::
string
strIniPath
=
GetProcDir
();
strIniPath
.
append
(
"config.ini"
);
strDeviceId
=
ZIni
::
readString
(
"SYS"
,
"device_id"
,
""
,
strIniPath
.
c_str
());
LOG
(
INFO
)
<<
"device id:"
<<
strDeviceId
.
data
();
get_adInfo
(
vecADInfos
);
// global init curl
curl_global_init
(
CURL_GLOBAL_ALL
);
//std::string postAdResponseStr;
//curl_post_ad(strAdUrl,"6739c9fa37f547ef916d06d33a73331a","80052478", postAdResponseStr);
//LOG(INFO) <<"广告推送返回:" <<postAdResponseStr.data();
cv
::
VideoCapture
cap
(
0
);
if
(
!
cap
.
isOpened
())
{
...
...
@@ -391,4 +411,56 @@ void update_img_text(cv::Mat &image, int iframe, int target)
text
.
putText
(
&
IplImage
(
image
),
track_dets
[
i
].
strPhone
.
data
(),
cvPoint
(
track_dets
[
i
].
rc
.
right
()
+
5
,
track_dets
[
i
].
rc
.
top
()
+
45
),
CV_RGB
(
255
,
0
,
0
));
text
.
putText
(
&
IplImage
(
image
),
track_dets
[
i
].
strConfidence
.
data
(),
cvPoint
(
track_dets
[
i
].
rc
.
right
()
+
5
,
track_dets
[
i
].
rc
.
top
()
+
75
),
CV_RGB
(
255
,
0
,
0
));
}
}
void
get_adInfo
(
std
::
vector
<
adStruct
>
&
vecInfo
)
{
SQLite
sqlite
;
sqlite
.
initSQLite
();
sqlite
.
query
(
"select * from fmAdInfo"
,
vecInfo
);
sqlite
.
closeSQLite
();
}
CURLcode
curl_post_ad
(
const
string
&
url
,
const
string
equipmentId
,
const
string
productId
,
string
&
response
)
{
// init curl
CURL
*
curl
=
curl_easy_init
();
// res code
CURLcode
res
;
if
(
curl
)
{
struct
curl_httppost
*
formpost
=
NULL
;
struct
curl_httppost
*
lastptr
=
NULL
;
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"userId"
,
CURLFORM_COPYCONTENTS
,
"0ec78ea9ce9f4c3392399b663a5865cc"
,
CURLFORM_END
);
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"passWord"
,
CURLFORM_COPYCONTENTS
,
"cf79ae6addba60ad018347359bd144d2"
,
CURLFORM_END
);
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"equipmentId"
,
CURLFORM_COPYCONTENTS
,
equipmentId
.
data
(),
CURLFORM_END
);
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"productId"
,
CURLFORM_COPYCONTENTS
,
productId
.
data
(),
CURLFORM_END
);
// set params
struct
curl_slist
*
head
=
NULL
;
head
=
curl_slist_append
(
head
,
"Content-Type:multipart/form-data"
);
//head = curl_slist_append(head, "Content-Type:application/json");
curl_easy_setopt
(
curl
,
CURLOPT_HTTPHEADER
,
head
);
curl_easy_setopt
(
curl
,
CURLOPT_POST
,
1
);
// post req
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
url
.
c_str
());
// url
curl_easy_setopt
(
curl
,
CURLOPT_HTTPPOST
,
formpost
);
//curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str()); // params
curl_easy_setopt
(
curl
,
CURLOPT_SSL_VERIFYPEER
,
false
);
// if want to use https
curl_easy_setopt
(
curl
,
CURLOPT_SSL_VERIFYHOST
,
false
);
// set peer and host verify false
curl_easy_setopt
(
curl
,
CURLOPT_VERBOSE
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_READFUNCTION
,
NULL
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
req_reply
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEDATA
,
(
void
*
)
&
response
);
curl_easy_setopt
(
curl
,
CURLOPT_NOSIGNAL
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_HEADER
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_CONNECTTIMEOUT
,
3
);
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT
,
3
);
// start req
res
=
curl_easy_perform
(
curl
);
}
// release curl
curl_easy_cleanup
(
curl
);
return
res
;
}
\ No newline at end of file
FaceDetection/utility/SQLiteModule.cpp
View file @
d7f9856a
...
...
@@ -2,7 +2,7 @@
#include "utilCommonAPI.h"
#include "easylogging++.h"
#define BUFFER_SIZE 1024 //
缓冲区大小
#define BUFFER_SIZE 1024 //
缓冲区大小
SQLite
::
SQLite
()
{
...
...
@@ -17,17 +17,17 @@ SQLite::~SQLite()
bool
SQLite
::
initSQLite
()
{
std
::
string
strDbFileName
;
//*.db
名称
std
::
string
strDbFileName
;
//*.db
名称
std
::
string
strPath
=
GetProcDir
();
strPath
.
append
(
"fmdata.db"
);
strDbFileName
=
strPath
;
//
打开一个数据库,如果改数据库不存在,则创建一个名字为databaseName的数据库文件
//
打开一个数据库,如果改数据库不存在,则创建一个名字为databaseName的数据库文件
int
res
=
sqlite3_open
(
strDbFileName
.
c_str
(),
&
pDB
);
LOG
(
INFO
)
<<
"DbFileName:"
<<
strDbFileName
.
c_str
();
if
(
res
!=
SQLITE_OK
)
{
LOG
(
ERROR
)
<<
"
打开数据库失败:"
<<
strDbFileName
.
data
();
LOG
(
ERROR
)
<<
"
打开数据库失败
:"
<<
strDbFileName
.
data
();
return
false
;
}
try
...
...
@@ -36,7 +36,7 @@ bool SQLite::initSQLite()
}
catch
(
std
::
exception
&
ex
)
{
LOG
(
ERROR
)
<<
"
创建表异常:"
<
<
ex
.
what
();
LOG
(
ERROR
)
<<
"
创建表异常:
"
<<
ex
.
what
();
return
false
;
}
return
true
;
...
...
@@ -44,32 +44,27 @@ bool SQLite::initSQLite()
bool
SQLite
::
_createTable
()
{
//
插入一个表,返回值为SQLITE_OK为成功,否则输出出错信息
//
函数参数:第一个为操作数据库的指针,第二句为SQL命令字符串
//
第三个参数为callback函数,这里没有用,第四个参数为callback函数
//
中的第一个参数,第五个为出错信息
//
插入一个表,返回值为SQLITE_OK为成功,否则输出出错信息
//
函数参数:第一个为操作数据库的指针,第二句为SQL命令字符串
//
第三个参数为callback函数,这里没有用,第四个参数为callback函数
//
中的第一个参数,第五个为出错信息
bool
rlt
=
true
;
std
::
string
strTableName
=
"fm
Test
"
;
std
::
string
strTableName
=
"fm
AdInfo
"
;
if
(
!
isTableExist
(
pDB
,
strTableName
))
{
char
szCreate
[
1024
]
=
{
0
};
sprintf_s
(
szCreate
,
"create table %s(fm_id varchar(50) NOT NULL,\
statusCode int, \
msg varchar(200),\
prompt bool,\
fm_open_id varchar(50),\
total_amount int,\
paid_total_amount int,\
invoice_amount int,\
incentives_amount int,\
logtime TIMESTAMP default (datetime('now', 'localtime')),\
PRIMARY KEY (fm_id))"
,
strTableName
.
c_str
());
sprintf_s
(
szCreate
,
"create table %s(id int NOT NULL,\
user_tag varchar(50),\
goods_id varchar(50),\
goods_name varchar(200),\
logtime TIMESTAMP default (datetime('now', 'localtime')),\
PRIMARY KEY (id))"
,
strTableName
.
c_str
());
if
(
!
_execSql
(
szCreate
))
{
//
执行失败,退出
//
执行失败,退出
exit
(
0
);
}
}
else
{
LOG
(
INFO
)
<<
"
已存在表:"
<<
strTableName
.
data
()
;
LOG
(
INFO
)
<<
"
已存在表
:"
<<
strTableName
.
data
()
;
}
return
rlt
;
...
...
@@ -81,7 +76,7 @@ void SQLite::closeSQLite()
sqlite3_close
(
pDB
);
}
//
查看表是否存在
//
查看表是否存在
bool
SQLite
::
isTableExist
(
sqlite3
*
sqDb
,
std
::
string
strTableName
)
{
char
szQuery
[
1024
]
=
{
0
};
...
...
@@ -99,7 +94,7 @@ bool SQLite::isTableExist(sqlite3 *sqDb, std::string strTableName)
int
SQLite
::
isRecordExist
(
std
::
string
strTable
,
std
::
string
strKey
)
{
char
*
lpSql
=
new
char
[
BUFFER_SIZE
];
sprintf_s
(
lpSql
,
BUFFER_SIZE
,
"select * from %s where
trans_id
= '%s'"
,
strTable
.
c_str
(),
strKey
.
c_str
());
sprintf_s
(
lpSql
,
BUFFER_SIZE
,
"select * from %s where
user_tag
= '%s'"
,
strTable
.
c_str
(),
strKey
.
c_str
());
char
**
pResult
;
int
nRow
=
0
;
int
nCol
=
0
;
...
...
@@ -119,7 +114,7 @@ bool SQLite::_execSql(const char* sql)
int
res
=
sqlite3_exec
(
pDB
,
sql
,
0
,
0
,
&
errMsg
);
if
(
res
!=
SQLITE_OK
)
{
LOG
(
ERROR
)
<<
"
执行sql失败:"
<<
sql
<<
" 失败信息:"
<
<
errMsg
;
LOG
(
ERROR
)
<<
"
执行sql失败:"
<<
sql
<<
" 失败信息
:"
<<
errMsg
;
rlt
=
false
;
}
return
rlt
;
...
...
@@ -140,29 +135,53 @@ bool SQLite::remove(const char* sql)
return
_execSql
(
sql
);
}
std
::
string
UTF8ToASCII
(
const
char
*
utf8
)
{
std
::
string
strUtf8
;
int
len
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
utf8
,
-
1
,
NULL
,
0
);
wchar_t
*
wstr
=
new
wchar_t
[
len
+
1
];
memset
(
wstr
,
0
,
len
+
1
);
MultiByteToWideChar
(
CP_UTF8
,
0
,
utf8
,
-
1
,
wstr
,
len
);
len
=
WideCharToMultiByte
(
CP_ACP
,
0
,
wstr
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
char
*
str
=
new
char
[
len
+
1
];
memset
(
str
,
0
,
len
+
1
);
WideCharToMultiByte
(
CP_ACP
,
0
,
wstr
,
-
1
,
str
,
len
,
NULL
,
NULL
);
if
(
wstr
)
delete
[]
wstr
;
strUtf8
=
str
;
if
(
str
)
delete
[]
str
;
return
strUtf8
;
}
std
::
vector
<
adStruct
>
vecTempADInfo
;
int
callbackQuery
(
void
*
data
,
int
n_columns
,
char
**
column_values
,
char
**
column_names
)
{
try
{
std
::
string
col0
=
column_values
[
0
];
std
::
string
col1
=
column_values
[
1
];
std
::
string
col2
=
column_values
[
2
];
LOG
(
INFO
)
<<
"column0:"
<<
col0
<<
" column1:"
<<
col1
<<
" column2:"
<<
col2
;
adStruct
adInfo
;
adInfo
.
userTag
=
UTF8ToASCII
(
column_values
[
1
]);
adInfo
.
goodsId
=
column_values
[
2
];
adInfo
.
goodsName
=
UTF8ToASCII
(
column_values
[
3
]);
vecTempADInfo
.
push_back
(
adInfo
);
}
catch
(
std
::
exception
&
ex
)
{
LOG
(
ERROR
)
<<
"
读取数据失败:"
<<
ex
.
what
();
LOG
(
ERROR
)
<<
"
读取数据失败
:"
<<
ex
.
what
();
return
-
1
;
}
return
0
;
}
void
SQLite
::
query
(
const
char
*
sql
)
void
SQLite
::
query
(
const
char
*
sql
,
std
::
vector
<
adStruct
>
&
vecADInfos
)
{
vecTempADInfo
.
clear
();
int
rlt
=
sqlite3_exec
(
pDB
,
sql
,
callbackQuery
,
0
,
&
errMsg
);
if
(
rlt
!=
SQLITE_OK
)
{
LOG
(
ERROR
)
<<
"查询数据失败:"
<<
errMsg
;
LOG
(
ERROR
)
<<
"查询数据失败:"
<<
errMsg
;
}
else
{
vecADInfos
.
assign
(
vecTempADInfo
.
begin
(),
vecTempADInfo
.
end
());
}
}
\ No newline at end of file
FaceDetection/utility/SQLiteModule.h
View file @
d7f9856a
#ifndef SQLITE_MODULE_H
#define SQLITE_MODULE_H
#include <iostream>
#include <vector>
#include "sqlite3.h"
//广告信息结构体
struct
adStruct
{
std
::
string
userTag
;
//用户标签
std
::
string
goodsId
;
//商品广告ID
std
::
string
goodsName
;
//商品名称
};
class
SQLite
{
public
:
...
...
@@ -17,7 +26,7 @@ public:
bool
insert
(
const
char
*
sql
);
bool
update
(
const
char
*
sql
);
bool
remove
(
const
char
*
sql
);
void
query
(
const
char
*
sql
);
void
query
(
const
char
*
sql
,
std
::
vector
<
adStruct
>
&
vecADInfos
);
private
:
bool
_execSql
(
const
char
*
sql
);
bool
_createTable
();
...
...
FaceDetection/utility/jsonAnalysis.cpp
View file @
d7f9856a
// json.cpp :
定义控制台应用程序的入口点。
// json.cpp :
定义控制台应用程序的入口点。
//
#include "jsonAnalysis.h"
...
...
@@ -47,9 +47,9 @@ std::string GetIdentityUserJson(const char* photo)
sServerResponse
GetServerResultData
(
const
char
*
json
)
{
sServerResponse
res
;
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
{
std
::
cout
<<
"HasParseError11"
<<
std
::
endl
;
}
...
...
@@ -109,14 +109,14 @@ sServerResponse GetServerResultData(const char* json)
int
SocketRequestJson
(
const
char
*
json
)
{
int
result
=
0
;
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
{
//
可通过GetParseError()取得出错代码,
//
注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
//
使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
//
函数GetErrorOffset()返回出错发生的位置
//
可通过GetParseError()取得出错代码,
//
注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
//
使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
//
函数GetErrorOffset()返回出错发生的位置
//LOG_ERROR("GetTakeawayPrintInfo JSON parse error: (%d:%d)", document.GetParseError(), document.GetErrorOffset())
//return false;
}
...
...
Release/config.ini
0 → 100644
View file @
d7f9856a
[SYS]
device_id
=
6739c9fa37f547ef916d06d33a73331a
Release/fmdata.db
0 → 100644
View file @
d7f9856a
File added
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment