Linux 36.3 + JetPack v6.0@jetson-inference之语义分割

news2024/10/5 21:13:36

Linux 36.3 + JetPack v6.0@jetson-inference之语义分割

  • 1. 源由
  • 2. segNet
    • 2.1 命令选项
    • 2.2 下载模型
      • 2.2.1 Cityscapes
      • 2.2.2 DeepScene
      • 2.2.3 MHP
      • 2.2.4 VOC
      • 2.2.5 SUN
    • 2.3 操作示例
      • 2.3.1 单张照片
      • 2.3.2 多张照片
      • 2.3.3 视频
  • 3. 代码
    • 3.1 Python
    • 3.2 C++
  • 4. 参考资料

1. 源由

分类和目标识别基本上都是像素级别的卷积应用,并非整个图像范围。语义分割基于图像识别,对于环境感知尤其有用,它可以对场景中的许多不同潜在对象进行密集的逐像素分类,包括场景的前景和背景。

2. segNet

segNet 接受二维图像作为输入,并输出带有逐像素分类掩码叠加的第二张图像。掩码的每个像素对应于被分类的对象类别。

以下是可用的各种预训练分割模型,它们使用具有 Jetson 实时性能的 FCN-ResNet18 网络。这些模型适用于各种环境和主题,包括城市、越野小径以及室内办公空间和家庭。

下表列出了可用的预训练语义分割模型以及用于加载它们的 segnet 的相关 --network 参数。它们基于 21 类 FCN-ResNet18 网络,并使用 PyTorch 在各种数据集和分辨率上进行了训练,并将其导出为 ONNX 格式以便与 TensorRT 加载。

DatasetResolutionCLI ArgumentAccuracyJetson NanoJetson Xavier
Cityscapes512x256fcn-resnet18-cityscapes-512x25683.3%48 FPS480 FPS
Cityscapes1024x512fcn-resnet18-cityscapes-1024x51287.3%12 FPS175 FPS
Cityscapes2048x1024fcn-resnet18-cityscapes-2048x102489.6%3 FPS47 FPS
DeepScene576x320fcn-resnet18-deepscene-576x32096.4%26 FPS360 FPS
DeepScene864x480fcn-resnet18-deepscene-864x48096.9%14 FPS190 FPS
Multi-Human512x320fcn-resnet18-mhp-512x32086.5%34 FPS370 FPS
Multi-Human640x360fcn-resnet18-mhp-640x36087.1%23 FPS325 FPS
Pascal VOC320x320fcn-resnet18-voc-320x32085.9%45 FPS508 FPS
Pascal VOC512x320fcn-resnet18-voc-512x32088.5%34 FPS375 FPS
SUN RGB-D512x400fcn-resnet18-sun-512x40064.3%28 FPS340 FPS
SUN RGB-D640x512fcn-resnet18-sun-640x51265.1%17 FPS224 FPS

2.1 命令选项

$ segnet --help
usage: segnet [--help] [--network NETWORK] ...
              input_URI [output_URI]

Segment and classify a video/image stream using a semantic segmentation DNN.
See below for additional arguments that may not be shown above.

positional arguments:
    input_URI       resource URI of input stream  (see videoSource below)
    output_URI      resource URI of output stream (see videoOutput below)

segNet arguments:
  --network=NETWORK    pre-trained model to load, one of the following:
                           * fcn-resnet18-cityscapes-512x256
                           * fcn-resnet18-cityscapes-1024x512
                           * fcn-resnet18-cityscapes-2048x1024
                           * fcn-resnet18-deepscene-576x320
                           * fcn-resnet18-deepscene-864x480
                           * fcn-resnet18-mhp-512x320
                           * fcn-resnet18-mhp-640x360
                           * fcn-resnet18-voc-320x320 (default)
                           * fcn-resnet18-voc-512x320
                           * fcn-resnet18-sun-512x400
                           * fcn-resnet18-sun-640x512
  --model=MODEL        path to custom model to load (caffemodel, uff, or onnx)
  --prototxt=PROTOTXT  path to custom prototxt to load (for .caffemodel only)
  --labels=LABELS      path to text file containing the labels for each class
  --colors=COLORS      path to text file containing the colors for each class
  --input-blob=INPUT   name of the input layer (default: 'input_0')
  --output-blob=OUTPUT name of the output layer (default: 'output_0')
  --alpha=ALPHA        overlay alpha blending value, range 0-255 (default: 150)
  --visualize=VISUAL   visualization flags (e.g. --visualize=overlay,mask)
                       valid combinations are:  'overlay', 'mask'
  --profile            enable layer profiling in TensorRT


videoSource arguments:
    input                resource URI of the input stream, for example:
                             * /dev/video0               (V4L2 camera #0)
                             * csi://0                   (MIPI CSI camera #0)
                             * rtp://@:1234              (RTP stream)
                             * rtsp://user:pass@ip:1234  (RTSP stream)
                             * webrtc://@:1234/my_stream (WebRTC stream)
                             * file://my_image.jpg       (image file)
                             * file://my_video.mp4       (video file)
                             * file://my_directory/      (directory of images)
  --input-width=WIDTH    explicitly request a width of the stream (optional)
  --input-height=HEIGHT  explicitly request a height of the stream (optional)
  --input-rate=RATE      explicitly request a framerate of the stream (optional)
  --input-save=FILE      path to video file for saving the input stream to disk
  --input-codec=CODEC    RTP requires the codec to be set, one of these:
                             * h264, h265
                             * vp8, vp9
                             * mpeg2, mpeg4
                             * mjpeg
  --input-decoder=TYPE   the decoder engine to use, one of these:
                             * cpu
                             * omx  (aarch64/JetPack4 only)
                             * v4l2 (aarch64/JetPack5 only)
  --input-flip=FLIP      flip method to apply to input:
                             * none (default)
                             * counterclockwise
                             * rotate-180
                             * clockwise
                             * horizontal
                             * vertical
                             * upper-right-diagonal
                             * upper-left-diagonal
  --input-loop=LOOP      for file-based inputs, the number of loops to run:
                             * -1 = loop forever
                             *  0 = don't loop (default)
                             * >0 = set number of loops


videoOutput arguments:
    output               resource URI of the output stream, for example:
                             * file://my_image.jpg       (image file)
                             * file://my_video.mp4       (video file)
                             * file://my_directory/      (directory of images)
                             * rtp://<remote-ip>:1234    (RTP stream)
                             * rtsp://@:8554/my_stream   (RTSP stream)
                             * webrtc://@:1234/my_stream (WebRTC stream)
                             * display://0               (OpenGL window)
  --output-codec=CODEC   desired codec for compressed output streams:
                            * h264 (default), h265
                            * vp8, vp9
                            * mpeg2, mpeg4
                            * mjpeg
  --output-encoder=TYPE  the encoder engine to use, one of these:
                            * cpu
                            * omx  (aarch64/JetPack4 only)
                            * v4l2 (aarch64/JetPack5 only)
  --output-save=FILE     path to a video file for saving the compressed stream
                         to disk, in addition to the primary output above
  --bitrate=BITRATE      desired target VBR bitrate for compressed streams,
                         in bits per second. The default is 4000000 (4 Mbps)
  --headless             don't create a default OpenGL GUI window


logging arguments:
  --log-file=FILE        output destination file (default is stdout)
  --log-level=LEVEL      message output threshold, one of the following:
                             * silent
                             * error
                             * warning
                             * success
                             * info
                             * verbose (default)
                             * debug
  --verbose              enable verbose logging (same as --log-level=verbose)
  --debug                enable debug logging   (same as --log-level=debug)

注:关于照片、视频等基本操作,详见: 《Linux 36.3 + JetPack v6.0@jetson-inference之视频操作》

2.2 下载模型

两种方式:

  1. 创建 对象时,初始化会自动下载
  2. 通过手动将模型文件放置到data/networks/目录下

国内,由于“墙”的存在,对于我们这种处于起飞阶段的菜鸟来说就是“障碍”。有条件的朋友可以参考《apt-get通过代理更新系统》进行设置网络。

不过,NVIDIA还是很热心的帮助我们做了“Work around”,所有的模型都已经预先存放在中国大陆能访问的位置:Github - model-mirror-190618

  --network=NETWORK    pre-trained model to load, one of the following:
                           * fcn-resnet18-cityscapes-512x256
                           * fcn-resnet18-cityscapes-1024x512
                           * fcn-resnet18-cityscapes-2048x1024
                           * fcn-resnet18-deepscene-576x320
                           * fcn-resnet18-deepscene-864x480
                           * fcn-resnet18-mhp-512x320
                           * fcn-resnet18-mhp-640x360
                           * fcn-resnet18-voc-320x320 (default)
                           * fcn-resnet18-voc-512x320
                           * fcn-resnet18-sun-512x400
                           * fcn-resnet18-sun-640x512
  --model=MODEL        path to custom model to load (caffemodel, uff, or onnx)

根据以上Model方面信息,该命令支持:

  • fcn-resnet18-cityscapes-512x256
  • fcn-resnet18-cityscapes-1024x512
  • fcn-resnet18-cityscapes-2048x1024
  • fcn-resnet18-deepscene-576x320
  • fcn-resnet18-deepscene-864x480
  • fcn-resnet18-mhp-512x320
  • fcn-resnet18-mhp-640x360
  • fcn-resnet18-voc-320x320 (default)
  • fcn-resnet18-voc-512x320
  • fcn-resnet18-sun-512x400
  • fcn-resnet18-sun-640x512
  • 支持定制模型(需要用到通用的模型文件caffemodel, uff, or onnx)

作为示例,就下载一个fcn-resnet18-voc-320x320 (default)模型

$ mkdir model-mirror-190618
$ cd model-mirror-190618
$ wget https://github.com/dusty-nv/jetson-inference/releases/download/model-mirror-190618/FCN-ResNet18-Pascal-VOC-320x320.tar.gz
$ tar -zxvf FCN-ResNet18-Pascal-VOC-320x320.tar.gz -C ../data/networks
$ cd ..

注:这个模型文件下载要注意,将解压缩文件放置到FCN-ResNet18-Pascal-VOC-320x320目录下。

2.2.1 Cityscapes

Cityscapes数据集专注于对城市街景的语义理解。

在这里插入图片描述

2.2.2 DeepScene

DeepScene包含了在各种数据集上训练的单模态AdapNet++和多模态SSMA模型。
在这里插入图片描述

2.2.3 MHP

Multi-Human Parsing,新加坡国立大学 (NUS) 学习与视觉 (LV) 小组的多人体解析项目旨在推进人群场景中对人类的细粒度视觉理解。多人体解析与传统的定义明确的对象识别任务(如仅提供对象位置粗略预测的目标检测、仅预测实例级掩码而不提供身体部位和时尚类别详细信息的实例分割、以及不区分不同身份的类别级像素预测的人体解析)有显著不同。在现实世界中,多人互动的场景更为现实和普遍。

在这里插入图片描述

2.2.4 VOC

PASCAL VOC项目:

  • 提供用于对象类别识别的标准化图像数据集
  • 提供一套通用工具来访问数据集和注释
  • 使不同方法的评估和比较成为可能
  • 举办了对象类别识别性能评估的挑战赛(2005-2012年,现已结束)
    在这里插入图片描述

2.2.5 SUN

SUNRGB-D四种不同的传感器捕捉,包含10,000张RGB-D图像,规模类似于PASCAL VOC。整个数据集密集注释,包括146,617个2D多边形和58,657个带有准确物体方向的3D边界框,以及场景的3D房间布局和类别。这个数据集使我们能够为场景理解任务训练需要大量数据的算法,使用直接且有意义的3D指标进行评估,避免在小型测试集上过拟合,并研究跨传感器偏差。

在这里插入图片描述

2.3 操作示例

$ cd build/aarch64/bin/

2.3.1 单张照片

# C++
$ ./segnet --network=<model> input.jpg output.jpg                  # overlay segmentation on original
$ ./segnet --network=<model> --alpha=200 input.jpg output.jpg      # make the overlay less opaque
$ ./segnet --network=<model> --visualize=mask input.jpg output.jpg # output the solid segmentation mask
# Python
$ ./segnet.py --network=<model> input.jpg output.jpg                  # overlay segmentation on original
$ ./segnet.py --network=<model> --alpha=200 input.jpg output.jpg      # make the overlay less opaque
$ ./segnet.py --network=<model> --visualize=mask input.jpg output.jpg # output the segmentation mask

举例:

# C++
$ ./segnet --network=fcn-resnet18-cityscapes images/city_0.jpg images/test/output.jpg

# Python
$ ./segnet.py --network=fcn-resnet18-cityscapes images/city_0.jpg images/test/output.jpg

在这里插入图片描述

2.3.2 多张照片

# C++
$ ./segnet --network=fcn-resnet18-sun "images/room_*.jpg" images/test/room_output_%i.jpg
# Python
$ ./segnet.py --network=fcn-resnet18-sun "images/room_*.jpg" images/test/room_output_%i.jpg

2.3.3 视频

# Download test video
wget https://nvidia.box.com/shared/static/veuuimq6pwvd62p9fresqhrrmfqz0e2f.mp4 -O pedestrians.mp4
# C++
$ ./segnet --network=fcn-resnet18-cityscapes ../../../pedestrians.mp4 images/test/pedestrians_ssd_segnet_cpp.mp4
# Python
$ ./segnet.py --network=fcn-resnet18-cityscapes ../../../pedestrians.mp4 images/test/pedestrians_ssd_segnet_python.mp4

pedestrians

注:从远距离视频的分析结果看,并不是非常理想,因此,实际还是取决于应用场景。

3. 代码

3.1 Python

- Import Statements:
  ├── import sys
  ├── import argparse
  ├── from jetson_inference import segNet
  ├── from jetson_utils import videoSource, videoOutput, cudaOverlay, cudaDeviceSynchronize, Log
  └── from segnet_utils import *

- Parse Command Line:
  ├── parser = argparse.ArgumentParser(...)
  ├── parser.add_argument("input", ...)
  ├── parser.add_argument("output", ...)
  ├── parser.add_argument("--network", ...)
  ├── parser.add_argument("--filter-mode", ...)
  ├── parser.add_argument("--visualize", ...)
  ├── parser.add_argument("--ignore-class", ...)
  ├── parser.add_argument("--alpha", ...)
  ├── parser.add_argument("--stats", ...)
  └── args = parser.parse_known_args()[0]

- Load Segmentation Network:
  ├── net = segNet(args.network, sys.argv)

- Set Alpha Blending Value:
  └── net.SetOverlayAlpha(args.alpha)

- Create Video Output:
  └── output = videoOutput(args.output, argv=sys.argv)

- Create Buffer Manager:
  └── buffers = segmentationBuffers(net, args)

- Create Video Source:
  └── input = videoSource(args.input, argv=sys.argv)

- Process Frames Loop:
  └── while True:
      ├── img_input = input.Capture()
      ├── if img_input is None:
      │   └── continue
      ├── buffers.Alloc(img_input.shape, img_input.format)
      ├── net.Process(img_input, ignore_class=args.ignore_class)
      ├── if buffers.overlay:
      │   └── net.Overlay(buffers.overlay, filter_mode=args.filter_mode)
      ├── if buffers.mask:
      │   └── net.Mask(buffers.mask, filter_mode=args.filter_mode)
      ├── if buffers.composite:
      │   └── cudaOverlay(buffers.overlay, buffers.composite, 0, 0)
      │       └── cudaOverlay(buffers.mask, buffers.composite, buffers.overlay.width, 0)
      ├── output.Render(buffers.output)
      ├── output.SetStatus("{:s} | Network {:.0f} FPS".format(args.network, net.GetNetworkFPS()))
      ├── cudaDeviceSynchronize()
      ├── net.PrintProfilerTimes()
      ├── if args.stats:
      │   └── buffers.ComputeStats()
      └── if not input.IsStreaming() or not output.IsStreaming():
          └── break

3.2 C++

#include statements
├── "videoSource.h"
├── "videoOutput.h"
├── "cudaOverlay.h"
├── "cudaMappedMemory.h"
├── "segNet.h"
└── <signal.h>

Global variables
└── bool signal_recieved = false;

Function definitions
├── void sig_handler(int signo)
│   └── if (signo == SIGINT)
│       └── LogVerbose("received SIGINT\n");
│           └── signal_recieved = true;
└── int usage()
    ├── printf("usage: segnet [--help] [--network NETWORK] ...\n");
    ├── printf("              input_URI [output_URI]\n\n");
    ├── printf("Segment and classify a video/image stream using a semantic segmentation DNN.\n");
    ├── printf("See below for additional arguments that may not be shown above.\n\n");
    ├── printf("positional arguments:\n");
    ├── printf("    input_URI       resource URI of input stream  (see videoSource below)\n");
    ├── printf("    output_URI      resource URI of output stream (see videoOutput below)\n\n");
    ├── printf("%s\n", segNet::Usage());
    ├── printf("%s\n", videoSource::Usage());
    ├── printf("%s\n", videoOutput::Usage());
    └── printf("%s\n", Log::Usage());

segmentation buffers
├── pixelType* imgMask = NULL;
├── pixelType* imgOverlay = NULL;
├── pixelType* imgComposite = NULL;
├── pixelType* imgOutput = NULL;
├── int2 maskSize;
├── int2 overlaySize;
├── int2 compositeSize;
└── int2 outputSize;

allocate buffers
└── bool allocBuffers(int width, int height, uint32_t flags)
    ├── if (imgOverlay != NULL && width == overlaySize.x && height == overlaySize.y)
    ├── CUDA_FREE_HOST(imgMask);
    ├── CUDA_FREE_HOST(imgOverlay);
    ├── CUDA_FREE_HOST(imgComposite);
    ├── overlaySize = make_int2(width, height);
    ├── if (!cudaAllocMapped(&imgOverlay, overlaySize))
    ├── imgOutput = imgOverlay;
    ├── outputSize = overlaySize;
    ├── maskSize = (flags & segNet::VISUALIZE_OVERLAY) ? make_int2(width/2, height/2) : overlaySize;
    ├── if (!cudaAllocMapped(&imgMask, maskSize))
    ├── imgOutput = imgMask;
    ├── outputSize = maskSize;
    ├── compositeSize = make_int2(overlaySize.x + maskSize.x, overlaySize.y);
    ├── if (!cudaAllocMapped(&imgComposite, compositeSize))
    └── imgOutput = imgComposite;
        └── outputSize = compositeSize;

main function
├── parse command line
├── attach signal handler
├── create input stream
├── create output stream
├── create segmentation network
├── set alpha blending value
├── get overlay/mask filtering mode
├── get visualization flags
├── get object class to ignore
└── processing loop
    ├── capture next image
    │   └── if (!input->Capture(&imgInput, &status))
    ├── allocate buffers for this size frame
    │   └── if (!allocBuffers(input->GetWidth(), input->GetHeight(), visualizationFlags))
    ├── process the segmentation network
    │   └── if (!net->Process(imgInput, input->GetWidth(), input->GetHeight(), ignoreClass))
    ├── generate overlay
    │   └── if (visualizationFlags & segNet::VISUALIZE_OVERLAY)
    ├── generate mask
    │   └── if (visualizationFlags & segNet::VISUALIZE_MASK)
    ├── generate composite
    │   └── if ((visualizationFlags & segNet::VISUALIZE_OVERLAY) && (visualizationFlags & segNet::VISUALIZE_MASK))
    ├── render outputs
    │   └── if (output != NULL)
    └── wait for the GPU to finish

4. 参考资料

【1】jetson-inference - Semantic Segmentation with SegNet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HIK录像机GB28181对接相机不在线问题随笔

一、问题现象 【设备信息】型号&#xff1a;DS-8664N-I16-V3 V4.63.000 build 230412 【问题现象】HIK录像机使用GB28181对接异常相机无法正常上线&#xff0c;对接HIK相机可以正常上线。 【现场拓扑】现场拓扑如下 NVR侧使用固定公网IP地址。IPC侧使用家用宽带的方式&…

Intel x86+FPGA:智能AI计算机系统在支气管导航机器人的应用

随着人工智能的快速发展、技术的突破及应用领域的逐渐广泛化。医疗机器人作为人工智能时代在医疗领域应用的深化&#xff0c;能够有效帮助医生进行一系列的医疗诊断和辅助治疗&#xff0c;在有效缓解医疗资源紧张的问题下推动医疗信息化的发展。 智慧医疗场景应用 从应用场景来…

ctfshow-web入门-信息搜集(web11-web20)

目录 1、web11 2、web12 3、web13 4、web14 5、web15 6、web16 7、web17 8、web18 9、web19 10、web20 1、web11 域名其实也可以隐藏信息&#xff0c;比如flag.ctfshow.com 就隐藏了一条信息 查询域名的 DNS 记录&#xff0c;类型为 TXT&#xff08;域名的说明&#…

AI技术变革与企业服务创新

1、AI的技术变革 1&#xff09;AI市场规模 2&#xff09;AI大模型发展历程 3&#xff09;AIGC发展背景 4&#xff09;AIGC技术能力 AIGC的技术架构逻辑上分为基础层、技术层、能力层、应用层、终端层五大板块&#xff0c;其中核心技术层涵盖AI技术群和大模型的融合创新&#…

【QT】记录一次QT程序程序发布exe过程

记录一次QT程序程序发布exe过程 使用windeploy与enigma发布独立的QT程序第一步 QT编译输出 **release** 版本第二步 QT 自带 windepoyqt 补全链接库第三步 enigma virtual box压缩打包为单一exe最后参考 使用windeploy与enigma发布独立的QT程序 第一步 QT编译输出 release 版本…

layui左侧菜单栏,鼠标悬停显示菜单文字

layui封装的左侧菜单是固定宽度的&#xff0c;且左侧菜单栏在css里改变宽度&#xff0c;效果并不是很好&#xff08;还设计头部菜单栏&#xff09;&#xff0c;如果写js来让菜单栏能够拉伸&#xff0c;也比较麻烦&#xff0c;那怎么最简单的&#xff0c;让用户看到菜单的文字呢…

TIM时钟中断——输出捕获、输入捕获、编码器接口测速

输出捕获 通道与DMA 计算机中的通道是一种专用于输入/输出&#xff08;I/O&#xff09;操作的控制器&#xff0c;它充当了主机&#xff08;包括CPU和内存&#xff09;与外部设备之间数据传输的桥梁。通道的主要目的是提高系统的并行处理能力&#xff0c;允许CPU与I/O设备同时工…

探秘Facebook:社交媒体的未来之路

Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;一直处于数字社交革命的前沿。然而&#xff0c;随着科技和社会的不断发展&#xff0c;Facebook正面临着新的挑战和机遇。本文将探索Facebook的未来之路&#xff0c;揭示社交媒体的新趋势和发展方向。 1. 深度社…

二、Nginx目录结构与基本运行原理

目录 一、目录结构 二、运行原理 一、目录结构 我们使用tree 命令查看nginx的目录。如果tree 命令失效&#xff0c;需要安装tree工具 [rootlocalhost local]# yum install -y tree[rootlocalhost /]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # PO…

PDF软件PDF Extra Premium + Ultimate 9.30.56026

PDF Extra Premium是一个适用于Windows的程序,它提供了所有功能,***在一个地方处理PDF文件的需要。使用此程序,您可以: 扫描和识别文本。您可以轻松地将纸质文档扫描并数字化为可编辑的PDF文件。您可以使用手机的摄像头扫描任何类型的纸质文档:支票、合同、票据、票据、证…

外贸物流与报关操作全解析:避开那些常见的坑

外贸物流与报关是外贸流程中至关重要的环节&#xff0c;任何疏漏都可能导致货物延误、额外费用甚至违约赔偿。本文将详细解析外贸物流与报关操作的关键要点&#xff0c;并告诉你如何避开常见的坑。 一、外贸物流操作 外贸物流&#xff0c;即货物进出口的运输过程&#xff0c;涉…

JDK7 JDK8 JDK9接口中的默认方法、静态方法、私有方法

JDK8开始之后接口新增的方法 JDK7以前&#xff1a;接口中只能定义抽象方法 JDK8的新特性&#xff1a;接口中可以定义有方法体的方法&#xff08;默认、静态&#xff09; JDK9的新特性&#xff1a;接口中可以定义私有方法 接口中的默认方法InterA package com.itheima.a06;p…

【C++题解】 1468. 小鱼的航程

问题&#xff1a;1468. 小鱼的航程 类型&#xff1a;需要找规律的循环 题目描述&#xff1a; 有一只小鱼&#xff0c;它上午游泳150公里&#xff0c;下午游泳100公里&#xff0c;晚上和周末都休息&#xff08;实行双休日)&#xff0c;假设从周x(1<x<7)开始算起&#xf…

C语言基础——函数

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言 一、函数的概念 二、库函数 2.1 库函数和头文件 2.2 库函数的使用/…

python中关于函数的两种链式调用

函数之间的嵌套调用之函数的返回值就是另一个函数的参数 用一个函数的返回值作为另一个函数的参数。 如上图所示&#xff0c;将is0dd&#xff08;10&#xff09;的结果交给print函数来执行。 如上图所示&#xff0c;也是一个链式调用的案例&#xff0c;先将add&#xff08;x&a…

Linux宝塔部署数据库连接问题

博主在部署项目时发现网页可以成功部署&#xff0c;但是登录界面一直登录不进去推测是数据库连接问题。 博主当时在IDEA中写的是用户名为root 密码123456 但是在宝塔中因为自己是跟着教程学的所以就顺手把用户名和密码都改了&#xff0c;于是java中的配置和数据库配置连接不上…

toB市场 | 我们喜欢赞助这样的展会活动

过去的六一儿童节&#xff0c;刚去成都参加了个行业内的展会。受护网行动、儿童节等等的影响&#xff0c;这次去成都的客户并不算太多&#xff0c;但会议延续了一贯的高品质&#xff0c;让我们收货满满。 选择目标受众来得多的展会 不同厂商会视自己的产品和模式、目标客户来…

15天搭建ETF量化交易系统Day7—全自动化交易系统

搭建过程 每个交易者都应该形成一套自己的交易系统。 很多交易者也清楚知道&#xff0c;搭建自己交易系统的重要性。现实中&#xff0c;从&#xff10;到&#xff11;往往是最难跨越的一步。 授人鱼不如授人以渔&#xff0c;为了帮助大家跨出搭建量化系统的第一步&#xff0c;我…

热搜爆了!AI秒写3篇湖南高考作文,邀你来打分!

今天上午 全国高考语文科目结束 作文题目成为焦点 相关话题立刻冲上热搜 今年湖南高考采用的是新课标 I 卷 作文题涉及到了人工智能 引发大量网友讨论 ↓↓↓ 随着互联网的普及、人工智能的应用&#xff0c;越来越多的问题能很快得到答案。那么&#xff0c;我们的问题是…

零基础入门学用Arduino 第一部分(一)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…