update code and src

update code and src
This commit is contained in:
2019-12-27 18:06:31 +08:00
parent e4056d9c2e
commit cf6be359ba
19 changed files with 112 additions and 52 deletions

BIN
4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
hejiong0.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
hejiong1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
hejiong2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
hejiong3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
hejiong4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
hejiong5.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
libingbing.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
result0.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
result1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@@ -50,7 +50,7 @@ void image2Matrix(const Mat &image, const struct pBox *pbox, int num) {
mydataFmt mymean, mystddev;
// prewhiten
if (num != 0) {
meanAndDev(image, &mymean, &mystddev);
meanAndDev(image, mymean, mystddev);
cout << mymean << "----" << mystddev << endl;
size = image.cols * image.rows * image.channels();
sqr = sqrt(double(size));
@@ -78,7 +78,7 @@ void image2Matrix(const Mat &image, const struct pBox *pbox, int num) {
}
}
void meanAndDev(const Mat &image, mydataFmt *p, mydataFmt *q) {
void meanAndDev(const Mat &image, mydataFmt &p, mydataFmt &q) {
mydataFmt meansum = 0, stdsum = 0;
for (int rowI = 0; rowI < image.rows; rowI++) {
for (int colK = 0; colK < image.cols; colK++) {
@@ -88,15 +88,15 @@ void meanAndDev(const Mat &image, mydataFmt *p, mydataFmt *q) {
// cout << int(image.at<Vec3b>(rowI, colK)[2]) << endl;
}
}
*p = meansum / (image.cols * image.rows * image.channels());
p = meansum / (image.cols * image.rows * image.channels());
for (int rowI = 0; rowI < image.rows; rowI++) {
for (int colK = 0; colK < image.cols; colK++) {
stdsum += pow((image.at<Vec3b>(rowI, colK)[0] - *p), 2) +
pow((image.at<Vec3b>(rowI, colK)[1] - *p), 2) +
pow((image.at<Vec3b>(rowI, colK)[2] - *p), 2);
stdsum += pow((image.at<Vec3b>(rowI, colK)[0] - p), 2) +
pow((image.at<Vec3b>(rowI, colK)[1] - p), 2) +
pow((image.at<Vec3b>(rowI, colK)[2] - p), 2);
}
}
*q = sqrt(stdsum / (image.cols * image.rows * image.channels()));
q = sqrt(stdsum / (image.cols * image.rows * image.channels()));
}
void featurePadInit(const pBox *pbox, pBox *outpBox, const int pad, const int padw, const int padh) {
@@ -682,10 +682,12 @@ void BatchNorm(struct pBox *pbox, struct BN *var, struct BN *mean, struct BN *be
mydataFmt *vp = var->pdata;
mydataFmt *mp = mean->pdata;
mydataFmt *bp = beta->pdata;
double scale = 0.995;
double bias = 0.0010000000474974513;
int gamma = 1;
float epsilon = 0.001;
long dis = pbox->width * pbox->height;
mydataFmt temp = 0;
for (int channel = 0; channel < pbox->channel; channel++) {
temp = gamma / sqrt(((vp[channel]) + epsilon));
for (int col = 0; col < dis; col++) {
// *pp = *pp + *vp;
// cout << ((*pp) / (sqrt(*vp + bias))) << endl;
@@ -693,12 +695,12 @@ void BatchNorm(struct pBox *pbox, struct BN *var, struct BN *mean, struct BN *be
// if (*pp == 0) {
// cout << *vp << "===" << *mp << "===" << *bp << endl;
// }
*pp = ((*pp) * (scale) / (sqrt(*vp + bias))) + ((*bp) - (((*pp) * (*mp) * (scale)) / (sqrt(*vp + bias))));
*pp = temp * (*pp) + ((bp[channel]) - temp * (mp[channel]));
// cout << *pp << endl;
pp++;
}
vp++;
mp++;
bp++;
// vp++;
// mp++;
// bp++;
}
}

View File

@@ -63,7 +63,7 @@ void vectorXmatrix(mydataFmt *matrix, mydataFmt *v, int size, int v_w, int v_h,
void convolution(const Weight *weight, const pBox *pbox, pBox *outpBox);
void meanAndDev(const Mat &image, mydataFmt *p, mydataFmt *q);
void meanAndDev(const Mat &image, mydataFmt &p, mydataFmt &q);
void initBN(struct BN *var, struct BN *mean, struct BN *beta, int width);

View File

@@ -9,7 +9,7 @@
using namespace std;
//#define mydataFmt double
#define Num 128
typedef double mydataFmt;
typedef float mydataFmt;
struct pBox : public cv::String {

View File

@@ -56,16 +56,16 @@ float compare(vector<mydataFmt> &lineArray0, vector<mydataFmt> &lineArray1) {
return result;
}
void run_mtcnn(Mat &image, vector<Rect> &vecRect) {
vector<Point> vecPoint;
void run_mtcnn(Mat &image, vector<Rect> &vecRect, vector<Point> &vecPoint) {
// vector<Point> vecPoint;
mtcnn find(image.rows, image.cols);
find.findFace(image, vecRect, vecPoint);
for (int i = 0; i < vecRect.size(); ++i) {
rectangle(image, vecPoint[7 * i + 0], vecPoint[7 * i + 1], Scalar(0, 0, 255), 2, 8, 0);
for (int num = 0; num < 5; num++)
circle(image, vecPoint[7 * i + num + 2], 2, Scalar(0, 255, 255),
-1);
}
// for (int i = 0; i < vecRect.size(); ++i) {
// rectangle(image, vecPoint[7 * i + 0], vecPoint[7 * i + 1], Scalar(0, 0, 255), 2, 8, 0);
// for (int num = 0; num < 5; num++)
// circle(image, vecPoint[7 * i + num + 2], 2, Scalar(0, 255, 255),
// -1);
// }
}
void run_facenet(Mat &image, vector<Rect> &vecRect, int csv_num = 0) {
@@ -84,37 +84,66 @@ void run_facenet(Mat &image, vector<Rect> &vecRect, int csv_num = 0) {
load_emb_csv(csv_num, o);
for (int j = 0; j < o.size(); ++j) {
float result = compare(n, o[j]);
cout << "-------------------" << endl;
cout << result << endl;
if (result < 0.85)
if (result < 0.45)
cout << "it's me" << endl;
else
cout << "unknow" << endl;
cout << j << endl;
}
} else {
imwrite("../emb_img/" + to_string(i) + ".jpg", fourthImage);
write_emb_csv(n, i);
}
}
}
float test_compare(vector<mydataFmt> &lineArray0, vector<mydataFmt> &lineArray1) {
mydataFmt sum = 0;
for (int i = 0; i < Num; ++i) {
// cout << lineArray0[i] << "===" << lineArray1[i] << endl;
mydataFmt sub = lineArray0[i] - lineArray1[i];
mydataFmt square = pow(sub, 2);
sum += square;
}
mydataFmt result = sqrt(sum);
return result;
}
void test_facenet(Mat &image, vector<Rect> &vecRect, vector<mydataFmt> &n) {
Mat fourthImage;
resize(image(vecRect[0]), fourthImage, Size(160, 160), 0, 0, cv::INTER_LINEAR);
facenet ggg;
// mydataFmt *o = new mydataFmt[Num];
// vector<mydataFmt> n;
vector<vector<mydataFmt>> o;
ggg.run(fourthImage, n, 0);
}
void run() {
int b = 0;
if (b == 0) {
// Mat image = imread("../40.jpg");
// Mat image = imread("../3.jpeg");
// Mat image = imread("../xiena.jpg");
// Mat image = imread("../kongweiye.jpg");
// Mat image = imread("../40.jpg");
Mat image = imread("../3.jpeg");
// Mat image = imread("../4.jpeg");
// Mat image = imread("../xiena.jpeg");
// Mat image = imread("../hejiong.jpeg");
// Mat image = imread("../libingbing.jpeg");
// Mat image = imread("../zhangjie.jpg");
// Mat image = imread("../Kong_Weiye.jpg");
// Mat image = imread("../kkk.jpg");
Mat image = imread("../20.png");
// Mat image = imread("../20.png");
// Mat image = imread("../emb_img/0.jpg");
clock_t start;
start = clock();
vector<Rect> vecRect;
run_mtcnn(image, vecRect);
run_facenet(image, vecRect,13);// 第三个参数csv数量如果为0则是保存emb到csv功能
vector<Point> vecPoint;
run_mtcnn(image, vecRect, vecPoint);
run_facenet(image, vecRect, 13);// 第三个参数csv数量如果为0则是保存emb到csv功能
imshow("result", image);
imwrite("../result.jpg", image);
@@ -123,24 +152,6 @@ void run() {
cout << "time is " << (double) start / CLOCKS_PER_SEC * 1000 << "ms" << endl;
waitKey(5000);
image.release();
} else if (b == 1) {
Mat image = imread("../10.jpg");
// Mat image = imread("../emb_img/0.jpg");
// Mat image = imread("../20.png");
Mat Image;
resize(image, Image, Size(160, 160), 0, 0, cv::INTER_LINEAR);
facenet ggg;
mydataFmt *o = new mydataFmt[Num];
// ggg.run(Image, o, 0);
// imshow("result", Image);
imwrite("../result.jpg", Image);
for (int i = 0; i < Num; ++i) {
cout << o[i] << endl;
}
waitKey(0);
image.release();
} else {
Mat image;
VideoCapture cap(0);
@@ -171,9 +182,56 @@ void run() {
}
}
void test() {
Mat image0 = imread("../kkk.jpg");
Mat image1 = imread("../hejiong0.jpeg");
clock_t start;
start = clock();
vector<Rect> vecRect0, vecRect1;
vector<mydataFmt> n0, n1;
vector<Point> vecPoint0, vecPoint1;
run_mtcnn(image0, vecRect0, vecPoint0);
test_facenet(image0, vecRect0, n0);
run_mtcnn(image1, vecRect1, vecPoint1);
test_facenet(image1, vecRect1, n1);
for (int i = 0; i < vecRect0.size(); ++i) {
rectangle(image0, vecPoint0[7 * i + 0], vecPoint0[7 * i + 1], Scalar(0, 0, 255), 2, 8, 0);
for (int num = 0; num < 5; num++)
circle(image0, vecPoint0[7 * i + num + 2], 2, Scalar(0, 255, 255),
-1);
}
for (int i = 0; i < vecRect1.size(); ++i) {
rectangle(image1, vecPoint1[7 * i + 0], vecPoint1[7 * i + 1], Scalar(0, 0, 255), 2, 8, 0);
for (int num = 0; num < 5; num++)
circle(image1, vecPoint1[7 * i + num + 2], 2, Scalar(0, 255, 255),
-1);
}
float result = test_compare(n0, n1);
cout << "-------------------" << endl;
cout << result << endl;
if (result < 0.45)
cout << "可能是同一个人" << endl;
else
cout << "很可能不是同一个人" << endl;
imshow("result0", image0);
imwrite("../result0.jpg", image0);
imshow("result1", image1);
imwrite("../result1.jpg", image1);
start = clock() - start;
// cout<<"time is "<<start/10e3<<endl;
cout << "time is " << (double) start / CLOCKS_PER_SEC * 1000 << "ms" << endl;
waitKey(0);
image0.release();
image1.release();
}
int main() {
for (int i = 0; i < 1; ++i) {
run();
test();
cout << "==============================" << endl;
}
}

BIN
xiena.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
zhangjie0.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
zhangjie1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
zhangjie2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
zhangjie3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB