更新CNN参数,使用CNN判断tracking是否跟丢。

This commit is contained in:
xinyang
2019-04-30 20:20:35 +08:00
parent e3098fe3fa
commit ee83a373d3
16 changed files with 12416 additions and 9793 deletions

View File

@@ -8,20 +8,12 @@
#include <armor_finder/armor_finder.h>
ArmorFinder::ArmorFinder(EnemyColor color, Uart &u, string paras_folder) :
uart(u),
enemy_color(color),
state(STANDBY_STATE),
classifier(std::move(paras_folder)),
contour_area(0)
{
// auto para = TrackerToUse::Params();
// para.desc_npca = 1;
// para.desc_pca = 0;
// tracker = TrackerToUse::create(para);
// if(!tracker){
// LOGW("Tracker Not init");
// }
uart(u),
enemy_color(color),
state(STANDBY_STATE),
classifier(std::move(paras_folder)),
contour_area(0)
{
}
void ArmorFinder::run(cv::Mat &src) {
@@ -39,22 +31,12 @@ void ArmorFinder::run(cv::Mat &src) {
case SEARCHING_STATE:
if(stateSearchingTarget(src_use)){
if((armor_box & cv::Rect2d(0, 0, 640, 480)) == armor_box) {
// cv::Mat roi = src_gray.clone()(armor_box);
// cv::threshold(roi, roi, 200, 255, cv::THRESH_BINARY);
// contour_area = cv::countNonZero(roi);
// auto para = TrackerToUse::Params();
// para.desc_npca = 1;
// para.desc_pca = 0;
// tracker = TrackerToUse::create(para);
// tracker->init(src_gray, armor_box);
// tracker->update(src_gray, armor_box);
cv::Mat roi = src_use.clone()(armor_box), roi_gray;
cv::cvtColor(roi, roi_gray, CV_RGB2GRAY);
// cv::imshow("boxroi", roi);
// cv::waitKey(0);
cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY);
contour_area = cv::countNonZero(roi_gray);
LOGW("%d", contour_area);
if(!classifier){
cv::Mat roi = src_use.clone()(armor_box), roi_gray;
cv::cvtColor(roi, roi_gray, CV_RGB2GRAY);
cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY);
contour_area = cv::countNonZero(roi_gray);
}
tracker = TrackerToUse::create();
tracker->init(src_use, armor_box);
state = TRACKING_STATE;

View File

@@ -155,7 +155,7 @@ bool ArmorFinder::stateSearchingTarget(cv::Mat &src) {
imageColorSplit(src, split, enemy_color);
cv::threshold(split, src_bin, 130, 255, CV_THRESH_BINARY);
imagePreProcess(src_bin);
cv::imshow("bin", src_bin);
// cv::imshow("bin", src_bin);
// cv::resize(split, split, cv::Size(640, 480));
// pipelineLightBlobPreprocess(pmsrc);
// if(!findLightBlobs(pmsrc, pm_light_blobs)){

View File

@@ -12,12 +12,20 @@ bool ArmorFinder::stateTrackingTarget(cv::Mat &src) {
return false;
}
cv::Mat roi = src.clone()(armor_box), roi_gray;
cv::cvtColor(roi, roi_gray, CV_RGB2GRAY);
cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY);
contour_area = cv::countNonZero(roi_gray);
if(abs(cv::countNonZero(roi_gray) - contour_area) > contour_area * 0.3){
return false;
cv::Mat roi = src.clone()(armor_box);
if(classifier){
cv::resize(roi, roi, cv::Size(48, 36));
if(classifier(roi) == 0){
return false;
}
}else{
cv::Mat roi_gray;
cv::cvtColor(roi, roi_gray, CV_RGB2GRAY);
cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY);
contour_area = cv::countNonZero(roi_gray);
if(abs(cv::countNonZero(roi_gray) - contour_area) > contour_area * 0.3){
return false;
}
}
return sendBoxPosition();
}