adding img and opencv
This commit is contained in:
parent
13aee5d6f5
commit
70855d50e7
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -9,5 +9,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- name: Install Deps
|
||||||
|
run: sudo apt -y install libopencv-dev
|
||||||
- name: Build
|
- name: Build
|
||||||
run: mkdir build && cd build && ../cbuild
|
run: mkdir build && cd build && ../cbuild
|
20
.vscode/launch.json
vendored
Normal file
20
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "dbg img",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/build/kc",
|
||||||
|
"args": ["img"],
|
||||||
|
"environment": [{ "name": "config", "value": "Debug" }],
|
||||||
|
"cwd": "${workspaceFolder}/build",
|
||||||
|
"osx": {
|
||||||
|
"MIMode": "lldb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
add_executable(kc
|
add_executable(kc
|
||||||
main.cpp
|
main.cpp
|
||||||
|
appcontext.cpp
|
||||||
fs/fs.cpp
|
fs/fs.cpp
|
||||||
fs/FileEntry.cpp
|
fs/FileEntry.cpp
|
||||||
parse/Link.cpp
|
parse/Link.cpp
|
||||||
@ -8,6 +9,7 @@
|
|||||||
valid/link.cpp
|
valid/link.cpp
|
||||||
logging.cpp
|
logging.cpp
|
||||||
config.cpp
|
config.cpp
|
||||||
|
image/img.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
@ -17,4 +19,7 @@ FetchContent_Declare(
|
|||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(Boost)
|
FetchContent_MakeAvailable(Boost)
|
||||||
|
|
||||||
target_link_libraries(kc PRIVATE Boost::program_options Boost::log Boost::date_time Boost::filesystem Boost::system Boost::thread Boost::log_setup Boost::chrono Boost::atomic)
|
find_package( OpenCV REQUIRED )
|
||||||
|
include_directories( ${OpenCV_INCLUDE_DIRS} )
|
||||||
|
|
||||||
|
target_link_libraries(kc PRIVATE Boost::program_options Boost::log Boost::date_time Boost::filesystem Boost::system Boost::thread Boost::log_setup Boost::chrono Boost::atomic ${OpenCV_LIBS})
|
41
src/appcontext.cpp
Normal file
41
src/appcontext.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include "appcontext.hpp"
|
||||||
|
|
||||||
|
#include "config.hpp"
|
||||||
|
#include "logging.hpp"
|
||||||
|
|
||||||
|
namespace kc {
|
||||||
|
|
||||||
|
AppContext::AppContext()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppContext::load_config(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
config = init_config(argc, argv);
|
||||||
|
config_loaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppContext::load_and_parse_cache()
|
||||||
|
{
|
||||||
|
auto env_path = (*config)["path"].as<std::string>();
|
||||||
|
print_and_log("> Loading knowledge base from " + env_path);
|
||||||
|
|
||||||
|
file_cache = std::make_shared<kc::FileContextCache>();
|
||||||
|
file_cache->load(env_path);
|
||||||
|
file_cache->parse_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string AppContext::command()
|
||||||
|
{
|
||||||
|
if (config->count("command") == 1)
|
||||||
|
{
|
||||||
|
return (*config)["command"].as<std::string>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
src/appcontext.hpp
Normal file
31
src/appcontext.hpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
|
#include "parse/FileContextCache.hpp"
|
||||||
|
|
||||||
|
namespace kc {
|
||||||
|
|
||||||
|
class AppContext {
|
||||||
|
public:
|
||||||
|
|
||||||
|
std::shared_ptr<boost::program_options::variables_map> config;
|
||||||
|
std::shared_ptr<kc::FileContextCache> file_cache;
|
||||||
|
|
||||||
|
AppContext();
|
||||||
|
|
||||||
|
void load_config(int argc, const char *argv[]);
|
||||||
|
void load_and_parse_cache();
|
||||||
|
|
||||||
|
std::string command();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
bool config_loaded;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -14,6 +14,7 @@ std::shared_ptr<po::variables_map> init_config(int argc, const char *argv[])
|
|||||||
("help", "produce help message")
|
("help", "produce help message")
|
||||||
("path,p", po::value<std::string>()->default_value("."), "set root path of knowledge base")
|
("path,p", po::value<std::string>()->default_value("."), "set root path of knowledge base")
|
||||||
("config", po::value<std::string>()->default_value("kc.ini"), "config file location")
|
("config", po::value<std::string>()->default_value("kc.ini"), "config file location")
|
||||||
|
("out,o", po::value<std::string>()->default_value("."), "output file location")
|
||||||
("command", po::value<std::string>(), "command to execute")
|
("command", po::value<std::string>(), "command to execute")
|
||||||
("subargs", po::value<std::vector<std::string> >(), "Arguments for command")
|
("subargs", po::value<std::vector<std::string> >(), "Arguments for command")
|
||||||
("index", po::value<int>()->default_value(1), "index")
|
("index", po::value<int>()->default_value(1), "index")
|
||||||
|
25
src/image/img.cpp
Normal file
25
src/image/img.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include "img.hpp"
|
||||||
|
|
||||||
|
namespace kc {
|
||||||
|
|
||||||
|
void image_proc(const std::vector<std::shared_ptr<kc::FileContext>> &contexts)
|
||||||
|
{
|
||||||
|
for (auto const context: contexts)
|
||||||
|
{
|
||||||
|
if (context->images.size() > 0)
|
||||||
|
{
|
||||||
|
auto img = context->images[0];
|
||||||
|
auto composed_path = context->abs_path(img);
|
||||||
|
|
||||||
|
cv::Mat image; // variable image of datatype Matrix
|
||||||
|
image = cv::imread(composed_path);
|
||||||
|
|
||||||
|
cv::imshow(img.link, image);
|
||||||
|
cv::waitKey(0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/image/img.hpp
Normal file
14
src/image/img.hpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <opencv2/opencv.hpp>
|
||||||
|
|
||||||
|
#include "../parse/FileContext.hpp"
|
||||||
|
|
||||||
|
namespace kc {
|
||||||
|
|
||||||
|
void image_proc(const std::vector<std::shared_ptr<kc::FileContext>> &contexts);
|
||||||
|
|
||||||
|
}
|
39
src/main.cpp
39
src/main.cpp
@ -8,11 +8,14 @@
|
|||||||
#include "const.hpp"
|
#include "const.hpp"
|
||||||
#include "logging.hpp"
|
#include "logging.hpp"
|
||||||
#include "config.hpp"
|
#include "config.hpp"
|
||||||
|
#include "appcontext.hpp"
|
||||||
#include "fs/fs.hpp"
|
#include "fs/fs.hpp"
|
||||||
#include "parse/FileContextCache.hpp"
|
#include "parse/FileContextCache.hpp"
|
||||||
#include "valid/link.hpp"
|
#include "valid/link.hpp"
|
||||||
|
#include "image/img.hpp"
|
||||||
|
|
||||||
void run_validate(std::shared_ptr<boost::program_options::variables_map> config);
|
void run_validate(kc::AppContext app_context);
|
||||||
|
void run_img(kc::AppContext app_context);
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, const char *argv[]) {
|
int main(int argc, const char *argv[]) {
|
||||||
@ -24,17 +27,23 @@ int main(int argc, const char *argv[]) {
|
|||||||
BOOST_LOG_TRIVIAL(info) << "================================";
|
BOOST_LOG_TRIVIAL(info) << "================================";
|
||||||
BOOST_LOG_TRIVIAL(info) << "Starting up....";
|
BOOST_LOG_TRIVIAL(info) << "Starting up....";
|
||||||
|
|
||||||
auto config = init_config(argc, argv);
|
kc::AppContext app_context;
|
||||||
|
app_context.load_config(argc, argv);
|
||||||
|
|
||||||
if(config)
|
if(app_context.config)
|
||||||
{
|
{
|
||||||
if (config->count("command") == 1)
|
auto command = app_context.command();
|
||||||
|
if (!command.empty())
|
||||||
{
|
{
|
||||||
auto command = (*config)["command"].as<std::string>();
|
|
||||||
|
|
||||||
if (command == "validate")
|
if (command == "validate")
|
||||||
{
|
{
|
||||||
run_validate(config);
|
app_context.load_and_parse_cache();
|
||||||
|
run_validate(app_context);
|
||||||
|
}
|
||||||
|
else if (command == "img")
|
||||||
|
{
|
||||||
|
app_context.load_and_parse_cache();
|
||||||
|
run_img(app_context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -49,14 +58,12 @@ int main(int argc, const char *argv[]) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_validate(std::shared_ptr<boost::program_options::variables_map> config)
|
void run_validate(kc::AppContext app_context)
|
||||||
{
|
{
|
||||||
auto env_path = (*config)["path"].as<std::string>();
|
kc::validate_links(app_context.file_cache->get());
|
||||||
print_and_log("> Loading knowledge base from " + env_path);
|
}
|
||||||
|
|
||||||
auto file_cache = kc::FileContextCache();
|
void run_img(kc::AppContext app_context)
|
||||||
file_cache.load(env_path);
|
{
|
||||||
file_cache.parse_all();
|
kc::image_proc(app_context.file_cache->get());
|
||||||
|
|
||||||
kc::validate_links(file_cache.get());
|
|
||||||
}
|
}
|
@ -37,7 +37,11 @@ void FileContext::parse()
|
|||||||
file_content = image_match.suffix();
|
file_content = image_match.suffix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __APPLE__
|
||||||
std::regex tag_regex(MD_TAG_REGEX, std::regex::multiline);
|
std::regex tag_regex(MD_TAG_REGEX, std::regex::multiline);
|
||||||
|
#else
|
||||||
|
std::regex tag_regex(MD_TAG_REGEX);
|
||||||
|
#endif
|
||||||
file_content = file_entry->get_content();
|
file_content = file_entry->get_content();
|
||||||
std::smatch tag_match;
|
std::smatch tag_match;
|
||||||
while(std::regex_search(file_content, tag_match, tag_regex)) {
|
while(std::regex_search(file_content, tag_match, tag_regex)) {
|
||||||
@ -48,4 +52,9 @@ void FileContext::parse()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::filesystem::path FileContext::abs_path(kc::Link link)
|
||||||
|
{
|
||||||
|
return file_entry->file_entry.path().parent_path() / fs::path(link.link);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -3,6 +3,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
#include "../fs/FileEntry.hpp"
|
#include "../fs/FileEntry.hpp"
|
||||||
#include "Link.hpp"
|
#include "Link.hpp"
|
||||||
@ -21,6 +22,7 @@ class FileContext {
|
|||||||
std::vector<std::string> tags;
|
std::vector<std::string> tags;
|
||||||
|
|
||||||
void parse();
|
void parse();
|
||||||
|
std::filesystem::path abs_path(kc::Link link);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ std::vector<kc::FileLinkStateResult> validate_links(const std::vector<std::share
|
|||||||
{
|
{
|
||||||
if(!link.is_external()) {
|
if(!link.is_external()) {
|
||||||
|
|
||||||
auto composed = context->file_entry->file_entry.path().parent_path() / fs::path(link.link);
|
auto composed = context->abs_path(link);
|
||||||
|
|
||||||
auto entry = fs::directory_entry(composed);
|
auto entry = fs::directory_entry(composed);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user