更新CNN参数,使用CNN判断tracking是否跟丢。
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)){
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user