一体いつから ――――― クリスマス当日に「27件目」のアドカレを投稿しないと錯覚していた
ふわはははは!!!!ちょっと試したので。
■OpenCVは画像がGrok君が作ったか分かる?⇒No!
「OpenCVはメタデータを扱えると言ったな。あれは(Grok生成画像に関しては)嘘だ」
■ Grok君製の画像には、Promptが含まれている ⇒ YESっぽい
- Grok君に画像を作ってもらう
- 作った画像をダウンロードする
- テキストエディタで開くと、先頭の方にXMP”もどき"が入ってるっぽい
kmtr@kmtr-VMware-Virtual-Platform:~$ jpeginfo CREATED.jpg -v
Reading file: CREATED.jpg
Found marker APP1 (0xE1): type=Unknown, original_length=1018, data_length=1018
Found marker APP0 (0xE0): type=JFIF, original_length=14, data_length=14
Found total of 2 markers (total size 1032 bytes), and 1 unknown markers
CREATED.jpg 832 x 1248 24bit N JFIF,UNKNOWN 120940
■ Xに投稿した画像には、Promptが含まれている ⇒ No!
だけど、Xに投稿した画像からは、こういうメタ情報はカットされている模様。
kmtr@kmtr-VMware-Virtual-Platform:~$ jpeginfo UPLOADED.jpg -v
Reading file: UPLOADED.jpg
Found marker APP0 (0xE0): type=JFIF, original_length=14, data_length=14
Found total of 1 markers (total size 14 bytes), and 0 unknown markers
UPLOADED.jpg 453 x 680 24bit P JFIF 11886
■ OpenCVのimreadWithMetadata()で読めるの?⇒ NO!
OpenCVのimgcodecsがメタ情報サポートしているんだったら、これも読めるんじゃないの?と思ったらダメなんですよね・・・
// g++ main.cpp -o a.out -I/usr/local/include/opencv4 -lopencv_core -lopencv_imgcodecs
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
int main() {
std::string filename = "CREATED.jpg";
cv::Mat img;
std::vector<int> metadataTypes = { cv::IMAGE_METADATA_XMP };
std::vector<cv::Mat> metadata;
img = cv::imreadWithMetadata(filename, metadataTypes, metadata, cv::IMREAD_COLOR);
if (img.empty()) {
return -1;
}
if (!metadata.empty()) {
cv::Mat xmpMat = metadata[0];
std::string xmp_str(xmpMat.begin<uchar>(), xmpMat.end<uchar>());
std::cout << "XMP Data: " << xmp_str << std::endl;
}
else
{
std::cout << "No XMP Data: " << std::endl;
}
return 0;
}
kmtr@kmtr-VMware-Virtual-Platform:~/work/temp$ strings CREATED.jpg | grep XMP
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.0-jc003">
kmtr@kmtr-VMware-Virtual-Platform:~/work/temp$ ./a.out
No XMP Data:
■ このデータはXMPメタデータなの? ⇒ No!!
なぜならば、OpenCVがAPP1 markerに "http://ns.adobe.com/xap/1.0/" という文字列が含まれていない場合、これはXMPではない!と判定します。どうやらXMPではなく、XMPっぽいもの、ですね。
先ほどのjpeginfoの結果も思い出すと、確かにUnknownになっている。ということで、"XMPっぽいもの"なのです。
kmtr@kmtr-VMware-Virtual-Platform:~$ jpeginfo CREATED.jpg -v
Reading file: CREATED.jpg
Found marker APP1 (0xE1): type=Unknown, original_length=1018, data_length=1018
Found marker APP0 (0xE0): type=JFIF, original_length=14, data_length=14
Found total of 2 markers (total size 1032 bytes), and 1 unknown markers
CREATED.jpg 832 x 1248 24bit N JFIF,UNKNOWN 120940
■ まとめ
- Grokで生成した画像にはPromptを含むメタ情報はあるっぽい
- でも、これをツイートするとフィルタリングされてメタ情報は消えるっぽい
- 完全なXMP準拠ではないので、OpenCVからは読めない。
以上、ありがとうございました!