- Пример: первый bbang block → bbang1 , второй bbang block → bbang2 , lec. /> < /li>
обнаружение и входы на метку /выходы < /strong>:
Если ввод /вывод блока имеет буквенно -цифровой label < /strong>, его следует использовать.BlockName_INPUTn (для входов) - BlockName_OUTPUTn (для выходов)
обнаружение соединений между блоками :
- Если выход block подключается к вводу другого блока без метки , если он должен быть записан с использованием linkto . Hwins3 (без метки), выход GRT2 должен быть:
linkTo(HWINS3_INPUT1) - Если A метка присутствует на стрелке, сама метка следует использовать в качестве выходного имени. Формат)
Каждый block должен быть записан следующим образом в таблице Excel:- Первая строка: name
- Вторая строка: number numbers, следовал входные лабил /> третья строка: Количество выходов, за которыми следуют выходные метки
Пример вывода для блока:
LOGICARRAY2
2, INPUT_A, INPUT_B
1, linkTo(HWINS3_INPUT1)
Challenge - Как я могу извлечь и распознавать блоки, входные данные, выходы и соединения из Сканированные рекомендации по доходам ? соответствие шаблонов) для точного обнаружения и классификации блоков? Пробовал использование соответствия шаблонов ... не работает на данный момент
#include
#include
#include
#include
namespace fs = std::filesystem;
using namespace cv;
using namespace std;
// Non-Maximum Suppression (NMS)
void nonMaxSuppression(vector& detectedRegions, double overlapThreshold) {
vector indices;
sort(detectedRegions.begin(), detectedRegions.end(), [](const Rect& a, const Rect& b) {
return a.area() > b.area();
});
for (size_t i = 0; i < detectedRegions.size(); ++i) {
bool keep = true;
for (size_t j = 0; j < i; ++j) {
float intersectionArea = (detectedRegions & detectedRegions[j]).area();
float unionArea = detectedRegions.area() + detectedRegions[j].area() - intersectionArea;
if ((intersectionArea / unionArea) > overlapThreshold) {
keep = false;
break;
}
}
if (keep) {
indices.push_back(i);
}
}
vector filteredDetections;
for (int index : indices) {
filteredDetections.push_back(detectedRegions[index]);
}
detectedRegions = filteredDetections;
}
// template matching
void detectBlocks(const string& diagramPath, const string& templateFolder, ofstream& outputFile) {
Mat inputImage = imread(diagramPath, IMREAD_GRAYSCALE);
if (inputImage.empty()) {
cout
Подробнее здесь: https://stackoverflow.com/questions/794 ... nk-diagram