AI识别成功后的报警文字绘制

serial
BlueMatthew 1 year ago
parent a44fb4f72b
commit 96ab61faa3

@ -1023,6 +1023,7 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat)
else if (thickness > 4) thickness = 4; else if (thickness > 4) thickness = 4;
cv::Scalar scalar(255, 255, 255); // white cv::Scalar scalar(255, 255, 255); // white
int fontSize = (int)(24.0 * ratio); int fontSize = (int)(24.0 * ratio);
cv::Point pt;
std::string fontPath; std::string fontPath;
if (existsFile("/system/fonts/NotoSansCJK-Regular.ttc")) if (existsFile("/system/fonts/NotoSansCJK-Regular.ttc"))
@ -1075,24 +1076,60 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat)
}; };
#endif #endif
cv::Scalar borderColor(m_pRecognizationCfg->borderColor & 0xFF, (m_pRecognizationCfg->borderColor & 0xFF00) >> 8, (m_pRecognizationCfg->borderColor & 0xFF0000) >> 16); cv::Scalar borderColor(m_pRecognizationCfg->borderColor & 0xFF, (m_pRecognizationCfg->borderColor & 0xFF00) >> 8, (m_pRecognizationCfg->borderColor & 0xFF0000) >> 16);
for (std::vector<IDevice::RECOG_OBJECT>::const_iterator it = objs.cbegin(); it != objs.cend(); ++it) cv::Scalar textColor(m_pRecognizationCfg->textColor & 0xFF, (m_pRecognizationCfg->textColor & 0xFF00) >> 8, (m_pRecognizationCfg->textColor & 0xFF0000) >> 16);
for (std::vector<IDevice::RECOG_OBJECT>::const_iterator it = objs.cbegin(); it != objs.cend();)
{ {
if (it->label >= m_pRecognizationCfg->items.size()) if (it->label >= m_pRecognizationCfg->items.size())
{ {
it = objs.erase(it);
continue; continue;
} }
const IDevice::CFG_RECOGNIZATION::ITEM& item = m_pRecognizationCfg->items[it->label]; const IDevice::CFG_RECOGNIZATION::ITEM& item = m_pRecognizationCfg->items[it->label];
if (item.enabled == 0 || it->prob < item.prob) if (item.enabled == 0 || it->prob < item.prob)
{ {
it = objs.erase(it);
continue; continue;
} }
if ((mPhotoInfo.recognization & 0x2) != 0)
{
cv::Rect rc(it->x, it->y, it->w, it->h);
cv::rectangle(mat, rc, borderColor, m_pRecognizationCfg->thickness);
textSize = ft2->getTextSize(item.name, fontSize, thickness, &baseline);
textSize.height += baseline;
if (it->y > textSize.height)
{
pt.y = it->y - textSize.height - 4 - m_pRecognizationCfg->thickness;
}
else if (mat.rows - it->y - it->h > textSize.height)
{
pt.y = it->y + it->h + 4 + m_pRecognizationCfg->thickness;
}
else
{
// Inner
pt.y = it->y + 4 + m_pRecognizationCfg->thickness;
}
if (mat.cols - it->x > textSize.width)
{
pt.x = it->x;
}
else
{
pt.x = it->x + it->w - textSize.width;
}
#ifdef _DEBUG #ifdef _DEBUG
ALOGD("Label: %d=%s (%f,%f)-(%f,%f)", it->label, item.name.c_str(), it->x, it->y, it->w, it->h); char buf[128];
snprintf(buf, sizeof(buf), "Draw Label: %d=%s (%f,%f)-(%f,%f) Text:(%d,%d)-(%d,%d)",
it->label, item.name.c_str(), it->x, it->y, it->w, it->h, pt.x, pt.y, textSize.width, textSize.height);
ALOGI(buf);
#endif #endif
cv::Rect rc(it->x, it->y, it->w, it->h);
cv::rectangle(mat, rc, borderColor, m_pRecognizationCfg->thickness); ft2->putText(mat, item.name, pt, fontSize, textColor, thickness, cv::LINE_AA, false);
// putText }
++it;
} }
} }
} }
@ -1115,17 +1152,8 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat)
textSize = ft2->getTextSize(str, fontSize, -1, &baseline); textSize = ft2->getTextSize(str, fontSize, -1, &baseline);
ft2->putText(mat, str, cv::Point(0, mat.rows - fontSize - 20 * ratio), ft2->putText(mat, str, cv::Point(0, mat.rows - fontSize - 20 * ratio),
fontSize, scalarRed, -1, cv::LINE_AA, false); fontSize, scalarRed, -1, cv::LINE_AA, false);
// text.putText(mat, str.c_str(), cv::Point(0, mat.rows - 20), scalar);
// puttext::Pixel32 colorText = {255, 255, 255};
// puttext::Pixel32 colorBorder = {0, 0, 0};
// textPaint.DrawText((puttext::Pixel32*)mat.data, wstr.c_str(), 16, colorText, colorBorder, 3);
#endif #endif
cv::Point pt;
for (vector<OSD_INFO>::const_iterator it = mOsds.cbegin(); it != mOsds.cend(); ++it) for (vector<OSD_INFO>::const_iterator it = mOsds.cbegin(); it != mOsds.cend(); ++it)
{ {
if (it->text.empty()) if (it->text.empty())

Loading…
Cancel
Save