summary refs log tree commit diff stats
path: root/sap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sap.cpp')
-rw-r--r--sap.cpp101
1 files changed, 50 insertions, 51 deletions
diff --git a/sap.cpp b/sap.cpp index 56fb677..7e1412a 100644 --- a/sap.cpp +++ b/sap.cpp
@@ -106,28 +106,8 @@ int minHeightRequired(std::vector<std::string> words, Magick::Image& textimage)
106 return result - 5; 106 return result - 5;
107} 107}
108 108
109void layoutText(Magick::Image& textimage, Magick::Image& shadowimage, int width, int height, std::string text) 109void layoutText(Magick::Image& textimage, Magick::Image& shadowimage, int width, int height, std::string text, const std::vector<std::string>& fonts)
110{ 110{
111 DIR* fontdir;
112 struct dirent* ent;
113 if ((fontdir = opendir("fonts")) == nullptr)
114 {
115 std::cout << "Couldn't find fonts." << std::endl;
116 return;
117 }
118
119 std::vector<std::string> fonts;
120 while ((ent = readdir(fontdir)) != nullptr)
121 {
122 std::string dname(ent->d_name);
123 if ((dname.find(".otf") != std::string::npos) || (dname.find(".ttf") != std::string::npos))
124 {
125 fonts.push_back(dname);
126 }
127 }
128
129 closedir(fontdir);
130
131 textimage.fillColor(Magick::Color(MaxRGB, MaxRGB, MaxRGB, MaxRGB * 0.0)); 111 textimage.fillColor(Magick::Color(MaxRGB, MaxRGB, MaxRGB, MaxRGB * 0.0));
132 shadowimage.fillColor(Magick::Color(0, 0, 0, 0)); 112 shadowimage.fillColor(Magick::Color(0, 0, 0, 0));
133 shadowimage.strokeColor("black"); 113 shadowimage.strokeColor("black");
@@ -145,8 +125,8 @@ void layoutText(Magick::Image& textimage, Magick::Image& shadowimage, int width,
145 if (font.empty() || (rand() % 10 == 0)) 125 if (font.empty() || (rand() % 10 == 0))
146 { 126 {
147 font = fonts[rand() % fonts.size()]; 127 font = fonts[rand() % fonts.size()];
148 textimage.font("fonts/" + font); 128 textimage.font(font);
149 shadowimage.font("fonts/" + font); 129 shadowimage.font(font);
150 } 130 }
151 131
152 int size = rand() % (maxSize - minSize + 1) + minSize; 132 int size = rand() % (maxSize - minSize + 1) + minSize;
@@ -273,8 +253,15 @@ int main(int argc, char** argv)
273 253
274 Magick::InitializeMagick(nullptr); 254 Magick::InitializeMagick(nullptr);
275 av_register_all(); 255 av_register_all();
256
257 if (argc != 2)
258 {
259 std::cout << "usage: sap [configfile]" << std::endl;
260 return -1;
261 }
276 262
277 YAML::Node config = YAML::LoadFile("config.yml"); 263 std::string configfile(argv[1]);
264 YAML::Node config = YAML::LoadFile(configfile);
278 265
279 twitter::auth auth; 266 twitter::auth auth;
280 auth.setConsumerKey(config["consumer_key"].as<std::string>()); 267 auth.setConsumerKey(config["consumer_key"].as<std::string>());
@@ -284,44 +271,56 @@ int main(int argc, char** argv)
284 271
285 twitter::client client(auth); 272 twitter::client client(auth);
286 273
287 std::ifstream infile("corpus1.txt"); 274 // Fonts
288 std::string corpus; 275 std::vector<std::string> fonts;
289 std::string line;
290 while (getline(infile, line))
291 { 276 {
292 if (line.back() == '\r') 277 std::string fontdirname = config["fonts"].as<std::string>();
278 DIR* fontdir;
279 struct dirent* ent;
280 if ((fontdir = opendir(fontdirname.c_str())) == nullptr)
293 { 281 {
294 line.pop_back(); 282 std::cout << "Couldn't find fonts." << std::endl;
283 return -2;
295 } 284 }
296 285
297 corpus += line + " "; 286 while ((ent = readdir(fontdir)) != nullptr)
287 {
288 std::string dname(ent->d_name);
289 if ((dname.find(".otf") != std::string::npos) || (dname.find(".ttf") != std::string::npos))
290 {
291 fonts.push_back(fontdirname + "/" + dname);
292 }
293 }
294
295 closedir(fontdir);
298 } 296 }
299 297
300 infile.close(); 298 rawr kgramstats;
301 299 for (const YAML::Node& corpusname : config["corpuses"])
302 std::ifstream infile2("corpus2.txt");
303 std::string corpus2;
304 while (getline(infile2, line))
305 { 300 {
306 if (line.back() == '\r') 301 std::ifstream infile(corpusname.as<std::string>());
302 std::string corpus;
303 std::string line;
304 while (getline(infile, line))
307 { 305 {
308 line.pop_back(); 306 if (line.back() == '\r')
307 {
308 line.pop_back();
309 }
310
311 corpus += line + " ";
309 } 312 }
310 313
311 corpus2 += line + " "; 314 kgramstats.addCorpus(corpus);
312 } 315 }
313 316
314 infile2.close();
315
316 rawr kgramstats;
317 kgramstats.addCorpus(corpus);
318 kgramstats.addCorpus(corpus2);
319 kgramstats.compile(5); 317 kgramstats.compile(5);
320 kgramstats.setMinCorpora(2); 318 kgramstats.setMinCorpora(config["corpuses"].size());
321 319
320 std::string videodirname = config["videos"].as<std::string>();
322 DIR* videodir; 321 DIR* videodir;
323 struct dirent* ent; 322 struct dirent* ent;
324 if ((videodir = opendir("videos")) == nullptr) 323 if ((videodir = opendir(videodirname.c_str())) == nullptr)
325 { 324 {
326 std::cout << "Couldn't find videos." << std::endl; 325 std::cout << "Couldn't find videos." << std::endl;
327 return -1; 326 return -1;
@@ -341,7 +340,7 @@ int main(int argc, char** argv)
341 340
342 for (;;) 341 for (;;)
343 { 342 {
344 std::string video = "videos/" + videos[rand() % videos.size()]; 343 std::string video = videodirname + "/" + videos[rand() % videos.size()];
345 std::cout << "Opening " << video << std::endl; 344 std::cout << "Opening " << video << std::endl;
346 345
347 AVFormatContext* format = nullptr; 346 AVFormatContext* format = nullptr;
@@ -436,7 +435,7 @@ int main(int argc, char** argv)
436 std::string action = kgramstats.randomSentence(rand() % 15 + 5); 435 std::string action = kgramstats.randomSentence(rand() % 15 + 5);
437 Magick::Image textimage(Magick::Geometry(width, height), "transparent"); 436 Magick::Image textimage(Magick::Geometry(width, height), "transparent");
438 Magick::Image shadowimage(Magick::Geometry(width, height), "transparent"); 437 Magick::Image shadowimage(Magick::Geometry(width, height), "transparent");
439 layoutText(textimage, shadowimage, width, height, action); 438 layoutText(textimage, shadowimage, width, height, action, fonts);
440 image.composite(shadowimage, 0, 0, Magick::OverCompositeOp); 439 image.composite(shadowimage, 0, 0, Magick::OverCompositeOp);
441 image.composite(textimage, 0, 0, Magick::OverCompositeOp); 440 image.composite(textimage, 0, 0, Magick::OverCompositeOp);
442 441