| 1638 | } |
| 1639 | |
| 1640 | bool PipelineParser::parse_rect(const json::value& input_rect, cv::Rect& output) |
| 1641 | { |
| 1642 | if (!input_rect.is_array()) { |
| 1643 | LogError << "rect is not array" << VAR(input_rect); |
| 1644 | return false; |
| 1645 | } |
| 1646 | |
| 1647 | auto& rect_array = input_rect.as_array(); |
| 1648 | if (rect_array.empty()) { |
| 1649 | LogError << "rect size invalid" << VAR(rect_array.size()); |
| 1650 | return false; |
| 1651 | } |
| 1652 | |
| 1653 | std::vector<int> rect_vec; |
| 1654 | for (const auto& r : rect_array) { |
| 1655 | if (!r.is_number()) { |
| 1656 | LogError << "type error" << VAR(r) << "is not integer"; |
| 1657 | return false; |
| 1658 | } |
| 1659 | rect_vec.emplace_back(r.as_integer()); |
| 1660 | } |
| 1661 | if (rect_vec.size() == 2) { |
| 1662 | output = cv::Rect(rect_vec[0], rect_vec[1], 1, 1); |
| 1663 | } |
| 1664 | else if (rect_vec.size() == 4) { |
| 1665 | output = cv::Rect(rect_vec[0], rect_vec[1], rect_vec[2], rect_vec[3]); |
| 1666 | } |
| 1667 | else { |
| 1668 | LogError << "rect size unsupported" << VAR(rect_vec.size()); |
| 1669 | return false; |
| 1670 | } |
| 1671 | return true; |
| 1672 | } |
| 1673 | |
| 1674 | template <typename TargetType> |
| 1675 | bool PipelineParser::parse_target_variant(const json::value& input_target, TargetType& output) |