Я и мои коллеги самостоятельно сделали обнаружение блобов на основе 3D-камеры Intel RealSense 3D [D435], теперь мы должны превратить это обнаружение в распознавание. Нам нужно сделать подсчет людей, поэтому я бы сказал, что нам нужно будет преобразовать пиксели в изображение, а затем сравнить его с другим изображением, если это примерно на 70% правильно, а затем вернуть true. Теперь я слышал, что это будет трудной задачей для процесса, особенно если он должен работать на Raspberry Pi. Как мне это сделать?
В настоящее время мы проверяем с самой высокой точки глубины камеры, если эта точка находится между 1 и 1,5 метрами, она будет использовать метод, который будет рекурсивно l oop через пиксели, следующие до тех пор, пока он не остановится, этот метод является методом blobCheck .
class Blob {
public:
map<Coords, int> blobList;
int blobIndex;
int MidPoint[2];
Mat* imRef;
Blob(vector<Blob>* list, Mat* imRef_) {
blobIndex = list->size() + 1;
imRef = imRef_;
}
bool loopCheck(int x, int y) {
if (blobList.size() == 0)
{
return true;
}
if (blobList.find(Coords(x, y)) != blobList.end()) {
return false;
}
return true;
}
void blobCheck(int x, int y, depth_frame* frame) {
float distance = frame->get_distance(x, y) + 0.05;
int step = 5;
float minHeight = 0.5;
try {
if (y - step <= 0 || x - step <= 0 || x >= frame->get_width() - step || y >= frame->get_height() - step || distance <= minHeight) {
return;
}
if (frame->get_distance(x, y - step) < distance) {
if (loopCheck(x, y - step)) {
blobList[Coords(x, y - step)] = 0;
blobCheck(x, y - step, frame);
}
}
if (frame->get_distance(x - step, y) < distance) {
if (loopCheck(x - step, y)) {
blobList[Coords(x - step, y)] = 0;
blobCheck(x - step, y, frame);
}
}
if (frame->get_distance(x, step + y) < distance) {
if (loopCheck(x, step + y)) {
blobList[Coords(x, step + y)] = 0;
blobCheck(x, step + y, frame);
}
}
if (frame->get_distance(x + step, y) < distance) {
if (loopCheck(x + step, y)) {
blobList[Coords(x + step, y)] = 0;
blobCheck(x + step, y, frame);
}
}
} catch (Exception) {}
}
};
Теперь у нас есть карта со всеми пикселями, которая будет отображать BLOB-объект со следующим кодом:
if (list.size() > 0) {
for (auto& mapItems : list[0].blobList) {
circle(*imRef, Point(mapItems.first.x, mapItems.first.y), 1, Scalar(255, 255, 255), 2);
}
}
Вы сможете увидеть пример на следующем изображении (не обязательно кликать, только если вы хотите увидеть пример): Обнаружение BLOB-объектов