Project import generated by Copybara.
GitOrigin-RevId: 6e5aa035cd1f6a9333962df5d3ab97a05bd5744e
This commit is contained in:
committed by
Sebastian Schmidt
parent
4a20e9909d
commit
c688862570
@@ -426,6 +426,7 @@ cc_test(
|
||||
"//mediapipe/framework/port:logging",
|
||||
"//mediapipe/framework/port:opencv_core",
|
||||
"//mediapipe/framework/port:parse_text_proto",
|
||||
"//mediapipe/framework/tool:test_util",
|
||||
"@com_google_absl//absl/flags:flag",
|
||||
],
|
||||
)
|
||||
@@ -451,6 +452,7 @@ cc_test(
|
||||
"//mediapipe/framework/port:opencv_imgproc",
|
||||
"//mediapipe/framework/port:opencv_video",
|
||||
"//mediapipe/framework/port:parse_text_proto",
|
||||
"//mediapipe/framework/tool:test_util",
|
||||
"@com_google_absl//absl/flags:flag",
|
||||
],
|
||||
)
|
||||
@@ -534,6 +536,7 @@ cc_test(
|
||||
"//mediapipe/framework/port:status",
|
||||
"//mediapipe/framework/stream_handler:fixed_size_input_stream_handler",
|
||||
"//mediapipe/framework/stream_handler:sync_set_input_stream_handler",
|
||||
"//mediapipe/framework/tool:test_util",
|
||||
"//mediapipe/util/tracking:box_tracker_cc_proto",
|
||||
"//mediapipe/util/tracking:tracking_cc_proto",
|
||||
"@com_google_absl//absl/flags:flag",
|
||||
|
||||
@@ -120,7 +120,7 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
// back. To get correct image format, we read the first frame from the video
|
||||
// and get the number of channels.
|
||||
cv::Mat frame;
|
||||
cap_->read(frame);
|
||||
ReadFrame(frame);
|
||||
if (frame.empty()) {
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Fail to read any frames from the video file at "
|
||||
@@ -193,13 +193,13 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
Timestamp timestamp(cap_->get(cv::CAP_PROP_POS_MSEC) * 1000);
|
||||
if (format_ == ImageFormat::GRAY8) {
|
||||
cv::Mat frame = formats::MatView(image_frame.get());
|
||||
cap_->read(frame);
|
||||
ReadFrame(frame);
|
||||
if (frame.empty()) {
|
||||
return tool::StatusStop();
|
||||
}
|
||||
} else {
|
||||
cv::Mat tmp_frame;
|
||||
cap_->read(tmp_frame);
|
||||
ReadFrame(tmp_frame);
|
||||
if (tmp_frame.empty()) {
|
||||
return tool::StatusStop();
|
||||
}
|
||||
@@ -234,6 +234,14 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
// Sometimes an empty frame is returned even though there are more frames.
|
||||
void ReadFrame(cv::Mat& frame) {
|
||||
cap_->read(frame);
|
||||
if (frame.empty()) {
|
||||
cap_->read(frame); // Try again.
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<cv::VideoCapture> cap_;
|
||||
int width_;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "mediapipe/framework/port/opencv_core_inc.h"
|
||||
#include "mediapipe/framework/port/parse_text_proto.h"
|
||||
#include "mediapipe/framework/port/status_matchers.h"
|
||||
#include "mediapipe/framework/tool/test_util.h"
|
||||
|
||||
namespace mediapipe {
|
||||
|
||||
@@ -32,6 +33,7 @@ namespace {
|
||||
constexpr char kVideoTag[] = "VIDEO";
|
||||
constexpr char kVideoPrestreamTag[] = "VIDEO_PRESTREAM";
|
||||
constexpr char kInputFilePathTag[] = "INPUT_FILE_PATH";
|
||||
constexpr char kTestPackageRoot[] = "mediapipe/calculators/video";
|
||||
|
||||
TEST(OpenCvVideoDecoderCalculatorTest, TestMp4Avc720pVideo) {
|
||||
CalculatorGraphConfig::Node node_config =
|
||||
@@ -41,10 +43,9 @@ TEST(OpenCvVideoDecoderCalculatorTest, TestMp4Avc720pVideo) {
|
||||
output_stream: "VIDEO:video"
|
||||
output_stream: "VIDEO_PRESTREAM:video_prestream")pb");
|
||||
CalculatorRunner runner(node_config);
|
||||
runner.MutableSidePackets()->Tag(kInputFilePathTag) = MakePacket<std::string>(
|
||||
file::JoinPath("./",
|
||||
"/mediapipe/calculators/video/"
|
||||
"testdata/format_MP4_AVC720P_AAC.video"));
|
||||
runner.MutableSidePackets()->Tag(kInputFilePathTag) =
|
||||
MakePacket<std::string>(file::JoinPath(GetTestDataDir(kTestPackageRoot),
|
||||
"format_MP4_AVC720P_AAC.video"));
|
||||
MP_EXPECT_OK(runner.Run());
|
||||
|
||||
EXPECT_EQ(runner.Outputs().Tag(kVideoPrestreamTag).packets.size(), 1);
|
||||
@@ -87,10 +88,9 @@ TEST(OpenCvVideoDecoderCalculatorTest, TestFlvH264Video) {
|
||||
output_stream: "VIDEO:video"
|
||||
output_stream: "VIDEO_PRESTREAM:video_prestream")pb");
|
||||
CalculatorRunner runner(node_config);
|
||||
runner.MutableSidePackets()->Tag(kInputFilePathTag) = MakePacket<std::string>(
|
||||
file::JoinPath("./",
|
||||
"/mediapipe/calculators/video/"
|
||||
"testdata/format_FLV_H264_AAC.video"));
|
||||
runner.MutableSidePackets()->Tag(kInputFilePathTag) =
|
||||
MakePacket<std::string>(file::JoinPath(GetTestDataDir(kTestPackageRoot),
|
||||
"format_FLV_H264_AAC.video"));
|
||||
MP_EXPECT_OK(runner.Run());
|
||||
|
||||
EXPECT_EQ(runner.Outputs().Tag(kVideoPrestreamTag).packets.size(), 1);
|
||||
@@ -131,10 +131,9 @@ TEST(OpenCvVideoDecoderCalculatorTest, TestMkvVp8Video) {
|
||||
output_stream: "VIDEO:video"
|
||||
output_stream: "VIDEO_PRESTREAM:video_prestream")pb");
|
||||
CalculatorRunner runner(node_config);
|
||||
runner.MutableSidePackets()->Tag(kInputFilePathTag) = MakePacket<std::string>(
|
||||
file::JoinPath("./",
|
||||
"/mediapipe/calculators/video/"
|
||||
"testdata/format_MKV_VP8_VORBIS.video"));
|
||||
runner.MutableSidePackets()->Tag(kInputFilePathTag) =
|
||||
MakePacket<std::string>(file::JoinPath(GetTestDataDir(kTestPackageRoot),
|
||||
"format_MKV_VP8_VORBIS.video"));
|
||||
MP_EXPECT_OK(runner.Run());
|
||||
|
||||
EXPECT_EQ(runner.Outputs().Tag(kVideoPrestreamTag).packets.size(), 1);
|
||||
|
||||
@@ -28,10 +28,14 @@
|
||||
#include "mediapipe/framework/port/opencv_video_inc.h"
|
||||
#include "mediapipe/framework/port/parse_text_proto.h"
|
||||
#include "mediapipe/framework/port/status_matchers.h"
|
||||
#include "mediapipe/framework/tool/test_util.h"
|
||||
|
||||
namespace mediapipe {
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr char kTestPackageRoot[] = "mediapipe/calculators/video";
|
||||
|
||||
// Temporarily disable the test.
|
||||
// TODO: Investigate the “Could not open codec 'libx264'” error with
|
||||
// opencv2.
|
||||
@@ -59,10 +63,9 @@ TEST(OpenCvVideoEncoderCalculatorTest, DISABLED_TestMp4Avc720pVideo) {
|
||||
}
|
||||
)pb");
|
||||
std::map<std::string, Packet> input_side_packets;
|
||||
input_side_packets["input_file_path"] = MakePacket<std::string>(
|
||||
file::JoinPath("./",
|
||||
"/mediapipe/calculators/video/"
|
||||
"testdata/format_MP4_AVC720P_AAC.video"));
|
||||
input_side_packets["input_file_path"] =
|
||||
MakePacket<std::string>(file::JoinPath(GetTestDataDir(kTestPackageRoot),
|
||||
"format_MP4_AVC720P_AAC.video"));
|
||||
const std::string output_file_path = "/tmp/tmp_video.mp4";
|
||||
DeletingFile deleting_file(output_file_path, true);
|
||||
input_side_packets["output_file_path"] =
|
||||
@@ -120,10 +123,9 @@ TEST(OpenCvVideoEncoderCalculatorTest, TestFlvH264Video) {
|
||||
}
|
||||
)pb");
|
||||
std::map<std::string, Packet> input_side_packets;
|
||||
input_side_packets["input_file_path"] = MakePacket<std::string>(
|
||||
file::JoinPath("./",
|
||||
"/mediapipe/calculators/video/"
|
||||
"testdata/format_FLV_H264_AAC.video"));
|
||||
input_side_packets["input_file_path"] =
|
||||
MakePacket<std::string>(file::JoinPath(GetTestDataDir(kTestPackageRoot),
|
||||
"format_FLV_H264_AAC.video"));
|
||||
const std::string output_file_path = "/tmp/tmp_video.avi";
|
||||
DeletingFile deleting_file(output_file_path, true);
|
||||
input_side_packets["output_file_path"] =
|
||||
@@ -183,10 +185,9 @@ TEST(OpenCvVideoEncoderCalculatorTest, TestMkvVp8Video) {
|
||||
}
|
||||
)pb");
|
||||
std::map<std::string, Packet> input_side_packets;
|
||||
input_side_packets["input_file_path"] = MakePacket<std::string>(
|
||||
file::JoinPath("./",
|
||||
"/mediapipe/calculators/video/"
|
||||
"testdata/format_MKV_VP8_VORBIS.video"));
|
||||
input_side_packets["input_file_path"] =
|
||||
MakePacket<std::string>(file::JoinPath(GetTestDataDir(kTestPackageRoot),
|
||||
"format_MKV_VP8_VORBIS.video"));
|
||||
const std::string output_file_path = "/tmp/tmp_video.mkv";
|
||||
DeletingFile deleting_file(output_file_path, true);
|
||||
input_side_packets["output_file_path"] =
|
||||
|
||||
@@ -33,39 +33,16 @@
|
||||
#include "mediapipe/framework/port/proto_ns.h"
|
||||
#include "mediapipe/framework/port/status.h"
|
||||
#include "mediapipe/framework/port/status_matchers.h"
|
||||
#include "mediapipe/framework/tool/test_util.h"
|
||||
#include "mediapipe/util/tracking/box_tracker.pb.h"
|
||||
#include "mediapipe/util/tracking/tracking.pb.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#endif // defined(__APPLE__)
|
||||
|
||||
namespace mediapipe {
|
||||
namespace {
|
||||
using ::testing::FloatNear;
|
||||
using ::testing::Test;
|
||||
|
||||
std::string GetTestDir() {
|
||||
#ifdef __APPLE__
|
||||
char path[1024];
|
||||
CFURLRef bundle_url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
|
||||
CFURLGetFileSystemRepresentation(
|
||||
bundle_url, true, reinterpret_cast<UInt8*>(path), sizeof(path));
|
||||
CFRelease(bundle_url);
|
||||
return mediapipe::file::JoinPath(path, "testdata");
|
||||
#elif defined(__ANDROID__)
|
||||
char path[1024];
|
||||
getcwd(path, sizeof(path));
|
||||
return mediapipe::file::JoinPath(path,
|
||||
"mediapipe/calculators/video/testdata");
|
||||
#else
|
||||
return mediapipe::file::JoinPath(
|
||||
"./",
|
||||
// This should match the path of the output files
|
||||
// of the genrule() that generates test model files.
|
||||
"mediapipe/calculators/video/testdata");
|
||||
#endif // defined(__APPLE__)
|
||||
}
|
||||
constexpr char kTestPackageRoot[] = "mediapipe/calculators/video";
|
||||
|
||||
bool LoadBinaryTestGraph(const std::string& graph_path,
|
||||
CalculatorGraphConfig* config) {
|
||||
@@ -85,7 +62,7 @@ class TrackingGraphTest : public Test {
|
||||
TrackingGraphTest() {}
|
||||
|
||||
void SetUp() override {
|
||||
test_dir_ = GetTestDir();
|
||||
test_dir_ = mediapipe::GetTestDataDir(kTestPackageRoot);
|
||||
const auto graph_path = file::JoinPath(test_dir_, "tracker.binarypb");
|
||||
ASSERT_TRUE(LoadBinaryTestGraph(graph_path, &config_));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user