当前位置: 首页 > news >正文

如何让网站被谷歌收录佛山做网站开发

如何让网站被谷歌收录,佛山做网站开发,roseonly企业网站优化,怎么指导电脑有么有安装wordpress在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集#xff0c;使用 LabelMe 工具进行标注#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件#xff0c;并自动生成YOLOv8支持的目录结构#xff0c;包括melon.yaml文件#xff0c;其内容… 在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集使用 LabelMe  工具进行标注然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件并自动生成YOLOv8支持的目录结构包括melon.yaml文件其内容如下 path: ../datasets/melon # dataset root dir train: images/train # train images (relative to path) val: images/val # val images (relative to path) test: # test images (optional)# Classes names:0: watermelon1: wintermelon 使用以下python脚本进行训练生成onnx文件 import argparse import colorama from ultralytics import YOLOdef parse_args():parser argparse.ArgumentParser(descriptionYOLOv8 train)parser.add_argument(--yaml, requiredTrue, typestr, helpyaml file)parser.add_argument(--epochs, requiredTrue, typeint, helpnumber of training)parser.add_argument(--task, requiredTrue, typestr, choices[detect, segment], helpspecify what kind of task)args parser.parse_args()return argsdef train(task, yaml, epochs):if task detect:model YOLO(yolov8n.pt) # load a pretrained modelelif task segment:model YOLO(yolov8n-seg.pt) # load a pretrained modelelse:print(colorama.Fore.RED Error: unsupported task:, task)raiseresults model.train(datayaml, epochsepochs, imgsz640) # train the modelmetrics model.val() # Itll automatically evaluate the data you trained, no arguments needed, dataset and settings rememberedmodel.export(formatonnx) #, dynamicTrue) # export the model, cannot specify dynamicTrue, opencv does not support# model.export(formatonnx, opset12, simplifyTrue, dynamicFalse, imgsz640)model.export(formattorchscript) # libtorchif __name__ __main__:colorama.init()args parse_args()train(args.task, args.yaml, args.epochs)print(colorama.Fore.GREEN execution completed ) 以下是使用onnxruntime接口加载onnx文件进行目标检测的实现代码 namespace {constexpr bool cuda_enabled{ false }; constexpr int image_size[2]{ 640, 640 }; // {height,width}, input shape (1, 3, 640, 640) BCHW and output shape(s) (1, 6, 8400) constexpr float model_score_threshold{ 0.45 }; // confidence threshold constexpr float model_nms_threshold{ 0.50 }; // iou threshold#ifdef _MSC_VER constexpr char* onnx_file{ ../../../data/best.onnx }; constexpr char* torchscript_file{ ../../../data/best.torchscript }; constexpr char* images_dir{ ../../../data/images/predict }; constexpr char* result_dir{ ../../../data/result }; constexpr char* classes_file{ ../../../data/images/labels.txt }; #else constexpr char* onnx_file{ data/best.onnx }; constexpr char* torchscript_file{ data/best.torchscript }; constexpr char* images_dir{ data/images/predict }; constexpr char* result_dir{ data/result }; constexpr char* classes_file{ data/images/labels.txt }; #endifstd::vectorstd::string parse_classes_file(const char* name) {std::vectorstd::string classes;std::ifstream file(name);if (!file.is_open()) {std::cerr Error: fail to open classes file: name std::endl;return classes;}std::string line;while (std::getline(file, line)) {auto pos line.find_first_of( );classes.emplace_back(line.substr(0, pos));}file.close();return classes; }auto get_dir_images(const char* name) {std::mapstd::string, std::string images; // image name, image path image namefor (auto const dir_entry : std::filesystem::directory_iterator(name)) {if (dir_entry.is_regular_file())images[dir_entry.path().filename().string()] dir_entry.path().string();}return images; }void draw_boxes(const std::vectorstd::string classes, const std::vectorint ids, const std::vectorfloat confidences,const std::vectorcv::Rect boxes, const std::string name, cv::Mat frame) {if (ids.size() ! confidences.size() || ids.size() ! boxes.size() || confidences.size() ! boxes.size()) {std::cerr Error: their lengths are inconsistent: ids.size() , confidences.size() , boxes.size() std::endl;return;}std::cout image name: name , number of detections: ids.size() std::endl;std::random_device rd;std::mt19937 gen(rd());std::uniform_int_distributionint dis(100, 255);for (auto i 0; i ids.size(); i) {auto color cv::Scalar(dis(gen), dis(gen), dis(gen));cv::rectangle(frame, boxes[i], color, 2);std::string class_string classes[ids[i]] std::to_string(confidences[i]).substr(0, 4);cv::Size text_size cv::getTextSize(class_string, cv::FONT_HERSHEY_DUPLEX, 1, 2, 0);cv::Rect text_box(boxes[i].x, boxes[i].y - 40, text_size.width 10, text_size.height 20);cv::rectangle(frame, text_box, color, cv::FILLED);cv::putText(frame, class_string, cv::Point(boxes[i].x 5, boxes[i].y - 10), cv::FONT_HERSHEY_DUPLEX, 1, cv::Scalar(0, 0, 0), 2, 0);}//cv::imshow(Inference, frame);//cv::waitKey(-1);std::string path(result_dir);path / name;cv::imwrite(path, frame); }std::wstring ctow(const char* str) {constexpr size_t len{ 128 };wchar_t wch[len];swprintf(wch, len, L%hs, str);return std::wstring(wch); }float image_preprocess(const cv::Mat src, cv::Mat dst) {cv::cvtColor(src, dst, cv::COLOR_BGR2RGB);float resize_scales{ 1. };if (src.cols src.rows) {resize_scales src.cols * 1.f / image_size[1];cv::resize(dst, dst, cv::Size(image_size[1], static_castint(src.rows / resize_scales)));} else {resize_scales src.rows * 1.f / image_size[0];cv::resize(dst, dst, cv::Size(static_castint(src.cols / resize_scales), image_size[0]));}cv::Mat tmp cv::Mat::zeros(image_size[0], image_size[1], CV_8UC3);dst.copyTo(tmp(cv::Rect(0, 0, dst.cols, dst.rows)));dst tmp;return resize_scales; }templatetypename T void image_to_blob(const cv::Mat src, T* blob) {for (auto c 0; c 3; c) {for (auto h 0; h src.rows; h) {for (auto w 0; w src.cols; w) {blob[c * src.rows * src.cols h * src.cols w] (src.atcv::Vec3b(h, w)[c]) / 255.f;}}} }void post_process(const float* data, int rows, int stride, float xfactor, float yfactor, const std::vectorstd::string classes,cv::Mat frame, const std::string name) {std::vectorint class_ids;std::vectorfloat confidences;std::vectorcv::Rect boxes;for (auto i 0; i rows; i) {const float* classes_scores data 4;cv::Mat scores(1, classes.size(), CV_32FC1, (float*)classes_scores);cv::Point class_id;double max_class_score;cv::minMaxLoc(scores, 0, max_class_score, 0, class_id);if (max_class_score model_score_threshold) {confidences.push_back(max_class_score);class_ids.push_back(class_id.x);float x data[0];float y data[1];float w data[2];float h data[3];int left int((x - 0.5 * w) * xfactor);int top int((y - 0.5 * h) * yfactor);int width int(w * xfactor);int height int(h * yfactor);boxes.push_back(cv::Rect(left, top, width, height));}data stride;}std::vectorint nms_result;cv::dnn::NMSBoxes(boxes, confidences, model_score_threshold, model_nms_threshold, nms_result);std::vectorint ids;std::vectorfloat confs;std::vectorcv::Rect rects;for (size_t i 0; i nms_result.size(); i) {ids.emplace_back(class_ids[nms_result[i]]);confs.emplace_back(confidences[nms_result[i]]);rects.emplace_back(boxes[nms_result[i]]);}draw_boxes(classes, ids, confs, rects, name, frame); }} // namespaceint test_yolov8_detect_onnxruntime() {// reference: ultralytics/examples/YOLOv8-ONNXRuntime-CPPtry {Ort::Env env Ort::Env(ORT_LOGGING_LEVEL_WARNING, Yolo);Ort::SessionOptions session_option;if (cuda_enabled) {OrtCUDAProviderOptions cuda_option;cuda_option.device_id 0;session_option.AppendExecutionProvider_CUDA(cuda_option);}session_option.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);session_option.SetIntraOpNumThreads(1);session_option.SetLogSeverityLevel(3);Ort::Session session(env, ctow(onnx_file).c_str(), session_option);Ort::AllocatorWithDefaultOptions allocator;std::vectorconst char* input_node_names, output_node_names;std::vectorstd::string input_node_names_, output_node_names_;for (auto i 0; i session.GetInputCount(); i) {Ort::AllocatedStringPtr input_node_name session.GetInputNameAllocated(i, allocator);input_node_names_.emplace_back(input_node_name.get());}for (auto i 0; i session.GetOutputCount(); i) {Ort::AllocatedStringPtr output_node_name session.GetOutputNameAllocated(i, allocator);output_node_names_.emplace_back(output_node_name.get());}for (auto i 0; i input_node_names_.size(); i)input_node_names.emplace_back(input_node_names_[i].c_str());for (auto i 0; i output_node_names_.size(); i)output_node_names.emplace_back(output_node_names_[i].c_str());Ort::RunOptions options(nullptr);std::unique_ptrfloat[] blob(new float[image_size[0] * image_size[1] * 3]);std::vectorint64_t input_node_dims{ 1, 3, image_size[1], image_size[0] };auto classes parse_classes_file(classes_file);if (classes.size() 0) {std::cerr Error: fail to parse classes file: classes_file std::endl;return -1;}for (const auto [key, val] : get_dir_images(images_dir)) {cv::Mat frame cv::imread(val, cv::IMREAD_COLOR);if (frame.empty()) {std::cerr Warning: unable to load image: val std::endl;continue;}auto tstart std::chrono::high_resolution_clock::now();cv::Mat rgb;auto resize_scales image_preprocess(frame, rgb);image_to_blob(rgb, blob.get());Ort::Value input_tensor Ort::Value::CreateTensorfloat(Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU), blob.get(), 3 * image_size[1] * image_size[0], input_node_dims.data(), input_node_dims.size());auto output_tensors session.Run(options, input_node_names.data(), input_tensor, 1, output_node_names.data(), output_node_names.size());Ort::TypeInfo type_info output_tensors.front().GetTypeInfo();auto tensor_info type_info.GetTensorTypeAndShapeInfo();std::vectorint64_t output_node_dims tensor_info.GetShape();auto output output_tensors.front().GetTensorMutableDatafloat();int stride_num output_node_dims[1];int signal_result_num output_node_dims[2];cv::Mat raw_data cv::Mat(stride_num, signal_result_num, CV_32F, output);raw_data raw_data.t();float* data (float*)raw_data.data;auto tend std::chrono::high_resolution_clock::now();std::cout elapsed millisenconds: std::chrono::duration_caststd::chrono::milliseconds(tend - tstart).count() ms std::endl;post_process(data, signal_result_num, stride_num, resize_scales, resize_scales, classes, frame, key);}}catch (const std::exception e) {std::cerr Error: e.what() std::endl;return -1;}return 0; } labels.txt文件内容如下仅2类 watermelon 0 wintermelon 1 说明 1.这里使用的onnxruntime版本为1.18.0 2.windows下onnxruntime库在debug和release为同一套库在debug和release下均可执行 3.通过指定变量cuda_enabled判断走cpu还是gpu流程 4.windows下onnxruntime中有些接口参数为wchar_t*而linux下为char*因此在windows下需要单独做转换这里通过ctow函数实现从char*到wchar_t的转换 5.yolov8中提供的sample有问题需要作调整。 执行结果如下图所示同样的预测图像集与opencv dnn结果相似它们具有相同的后处理流程下面显示的耗时是在cpu下gpu下仅20毫秒左右 其中一幅图像的检测结果如下图所示 GitHubhttps://github.com/fengbingchun/NN_Test
http://www.w-s-a.com/news/28299/

相关文章:

  • 奉贤集团公司网站建设小工具文本wordpress
  • 不用代码做网站网站建设和运行费用
  • 阜阳网站开发招聘网站建设合作协议申请
  • 电子配件 技术支持 东莞网站建设wordpress 生成html代码
  • 网站用免费空间好不好网站建设的视频
  • 网站开发项目职责门户资源分享网站模板
  • 建网站需要什么语言如何做二维码跳转到网站
  • 天津建设交培训中心网站做网站起名字
  • 黑河北京网站建设湛江市住房和城乡建设局网站
  • 网站建设拾金手指下拉十九企业查询官网
  • 邢台提供网站建设公司哪家好五合一建站
  • 京东网站设计代码驻马店做网站的公司
  • 织梦网站模板使用教程福州网站建设工作
  • 做网站要准备的需求asp 网站后台
  • 滨州网站开发公司中立建设集团有限公司网站
  • 泰安建设厅网站做网站为什么要建站点
  • 有什么好的手机推荐网站创建网站需要哪些工作
  • 网站能给企业带来什么上饶市网站建设公司
  • 学做网站卖东西去哪学南宁网站建设gxjzdrj
  • 欧美网站建设案例网站开发 男生
  • 网站正在开发中做电子元器件的网站
  • 做网站搭建的公司中国建设银行官网站u盾证书
  • 大连哪里有手机自适应网站建设公司网站介绍模板 html
  • 佛山模板建站宣传片制作公司电话
  • 文字网站居中能自己做网站接业务吗
  • 免备案自助建站网站广州珈瑶公司是哪一年注册的
  • ps做网站界面wordpress为图片添加圆角
  • seo优化推广业务员招聘seo顾问服务福建
  • 成都私人网站建设seo网站推广方案策划书
  • 广州网站建设工作室wordpress log