first commit

This commit is contained in:
nguentrungthat 2025-02-26 14:01:38 +07:00
commit 54cdeb14ec
52 changed files with 15184 additions and 0 deletions

14
.env Normal file
View File

@ -0,0 +1,14 @@
PUBLIC_URL=
REACT_APP_API_URL=
REACT_APP_DEFAULTAUTH=fake
REACT_APP_API_KEY=
REACT_APP_AUTHDOMAIN=
REACT_APP_DATABASEURL=
REACT_APP_PROJECTID=
REACT_APP_STORAGEBUCKET=
REACT_APP_MESSAGINGSENDERID=
REACT_APP_APPID=
REACT_APP_MEASUREMENTID=

23
.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

70
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,70 @@
{
"editor.formatOnSave": true,
"editor.suggestSelection": "first",
"editor.fontFamily": " 'FiraCode-Retina' ",
"editor.fontLigatures": true,
// "terminal.integrated.fontSize": 14,
// "terminal.integrated.shell.osx": "zsh",
"terminal.integrated.fontFamily": "monospace",
"vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
"javascript.preferences.importModuleSpecifier": "relative",
"typescript.preferences.importModuleSpecifier": "auto",
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/*.code-search": true
},
"workbench.editorAssociations": {
"*.class": "default"
},
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"workbench.editor.wrapTabs": true,
"workbench.colorTheme": "Evondev Dracula Darker Contrast",
"workbench.iconTheme": "vscode-icons",
"tabnine.experimentalAutoImports": true,
"security.workspace.trust.untrustedFiles": "open",
"[blade]": {
"editor.defaultFormatter": "shufo.vscode-blade-formatter"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"liveServer.settings.donotShowInfoMsg": true,
"liveServer.settings.port": 8000,
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"workbench.editor.enablePreview": false,
"files.associations": {
"*.js": "javascriptreact"
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"emmet.includeLanguages": {
"javascript": "javascriptreact"
},
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": "active",
"[php]": {
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
},
"prettier.printWidth": 150,
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"prettier.useTabs": true,
"prettier.bracketSameLine": true,
"prettier.endOfLine": "auto",
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}

70
README.md Normal file
View File

@ -0,0 +1,70 @@
# Getting Started with Create React App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
The page will reload when you make changes.\
You may also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can't go back!**
If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
### Code Splitting
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
### Analyzing the Bundle Size
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
### Making a Progressive Web App
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
### Advanced Configuration
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
### Deployment
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
### `npm run build` fails to minify
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)

BIN
dataset/images/s-l1600.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

13974
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

56
package.json Normal file
View File

@ -0,0 +1,56 @@
{
"name": "yolo_app",
"version": "0.1.0",
"private": true,
"dependencies": {
"-": "0.0.1",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"assert": "^2.1.0",
"buffer": "^6.0.3",
"child_process": "^1.0.2",
"fs": "0.0.1-security",
"numpy": "0.0.1",
"opencv-build": "^0.1.9",
"opencv4nodejs": "^5.6.0",
"os-browserify": "^0.3.0",
"path-browserify": "^1.0.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-scripts": "5.0.1",
"save-dev": "0.0.1-security",
"util": "^0.12.5",
"web-vitals": "^2.1.4",
"webpack": "^5.96.1",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^5.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"opencv4nodejs": {
"disableAutoBuild": "1"
}
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

43
public/index.html Normal file
View File

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

BIN
public/logo192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
public/logo512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

25
public/manifest.json Normal file
View File

@ -0,0 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

3
public/robots.txt Normal file
View File

@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

32
runing.py Normal file
View File

@ -0,0 +1,32 @@
import cv2
from ultralytics import YOLO
# Load model đã huấn luyện
model = YOLO("src/server/train5/weights/best.pt")
# Đọc ảnh
image_path = "dataset/images/s-l1600.png"
img = cv2.imread(image_path)
# Chạy mô hình để dự đoán
results = model(image_path, conf=0.5) # Hạ conf xuống để giữ nhiều phát hiện hơn
# Xử lý kết quả dự đoán
for r in results:
for box in r.boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0]) # Lấy tọa độ bbox
# print(x1, y1, x2, y2)
conf = float(box.conf[0]) # Độ tin cậy
cls = int(box.cls[0]) # Nhãn class ID
label = f"{model.names[cls]} {conf:.2f}" # Tạo nhãn hiển thị
# Vẽ bounding box (màu xanh lá cây)
cv2.rectangle(img, (x1, y1), (x2, y2), (199, 80, 105), 2)
# Vẽ nhãn (tên object)
cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# Hiển thị ảnh với bounding boxes
cv2.imshow("Detected Logos", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

38
src/App.css Normal file
View File

@ -0,0 +1,38 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

15
src/App.js Normal file
View File

@ -0,0 +1,15 @@
import logo from "./logo.svg";
import "./App.css";
import Main from "./pages/index";
function App() {
return (
<div className="App">
<header className="App-header">
<Main />
</header>
</div>
);
}
export default App;

8
src/App.test.js Normal file
View File

@ -0,0 +1,8 @@
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

13
src/index.css Normal file
View File

@ -0,0 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}

17
src/index.js Normal file
View File

@ -0,0 +1,17 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

1
src/logo.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,268 @@
import React, { useEffect, useRef, useState } from "react";
const PointBlurImageComponent = ({ imageSrc, blurredRegions, loaded, setLoaded, reloading, setReloading, setInfoImage, listLabel = [] }) => {
const points = useRef([]);
const canvasRef = useRef(null);
const isImageLoaded = useRef(false);
const [draggingPointIndex, setDraggingPointIndex] = useState(null);
const [movingRegionIndex, setMovingRegionIndex] = useState(null);
const [offset, setOffset] = useState({ x: 0, y: 0 });
const [info, setInfo] = useState({});
const [isOpen, setIsOpen] = useState(false);
useEffect(() => {
const canvas = canvasRef.current;
const ctx = canvas.getContext("2d");
const image = new Image();
image.onload = () => {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
isImageLoaded.current = true;
setInfoImage({ width: image.width, height: image.height });
};
image.crossOrigin = "anonymous";
image.src = imageSrc;
}, [imageSrc]);
useEffect(() => {
if (blurredRegions?.current?.length > 0) {
redrawCanvas();
setLoaded(true);
}
}, [blurredRegions?.current, reloading]);
useEffect(() => {
const canvas = canvasRef.current;
const handleCanvasClick = (event) => {
if (!isImageLoaded.current) return;
if (isOpen) return;
const { x, y } = getMousePos(canvas, event);
// Check if a delete button is clicked
for (let i = 0; i < blurredRegions.current.length; i++) {
const region = blurredRegions.current[i];
const buttonX = (region[0].x + region[1].x) / 2;
const buttonY = Math.min(region[0].y, region[1].y, region[2].y, region[3].y) - 20;
if (Math.abs(buttonX - x) < 30 && Math.abs(buttonY - y) < 10) {
// blurredRegions.current.splice(i, 1);
setInfo({ index: i, value: blurredRegions.current[i] });
setIsOpen(true);
redrawCanvas(i);
return;
}
}
points.current.push({ x, y, label: listLabel[0]?.name || "cisco" });
drawRedPoint(canvas, x, y);
if (points.current.length === 4) {
blurredRegions.current.push([...points.current]);
points.current = []; // Clear points after blurring
setReloading((pre) => !pre);
}
};
const handleCanvasMouseDown = (event) => {
if (isOpen) return;
const { x, y } = getMousePos(canvas, event);
// Check if we clicked on an existing point
for (let i = 0; i < blurredRegions.current.length; i++) {
for (let j = 0; j < blurredRegions.current[i].length; j++) {
const point = blurredRegions.current[i][j];
if (Math.abs(point.x - x) < 5 && Math.abs(point.y - y) < 5) {
setDraggingPointIndex({ regionIndex: i, pointIndex: j });
setOffset({ x: point.x - x, y: point.y - y });
return;
}
}
// Check if we clicked inside a region
const region = blurredRegions.current[i];
if (isPointInRegion(x, y, region)) {
setMovingRegionIndex(i);
setOffset({ x: region[0].x - x, y: region[0].y - y });
return;
}
}
handleCanvasClick(event);
};
const handleCanvasMouseUp = () => {
setDraggingPointIndex(null);
setMovingRegionIndex(null);
redrawCanvas(info?.index);
};
const handleCanvasMouseMove = (event) => {
if (draggingPointIndex === null && movingRegionIndex === null) return;
const { x, y } = getMousePos(canvas, event);
if (draggingPointIndex !== null) {
const { regionIndex, pointIndex } = draggingPointIndex;
blurredRegions.current[regionIndex][pointIndex] = {
x: x + offset.x,
y: y + offset.y,
label: blurredRegions.current[regionIndex][pointIndex]?.label,
};
redrawCanvas();
} else if (movingRegionIndex !== null) {
const region = blurredRegions.current[movingRegionIndex];
const dx = x + offset.x - region[0].x;
const dy = y + offset.y - region[0].y;
for (let i = 0; i < region.length; i++) {
region[i].x += dx;
region[i].y += dy;
}
redrawCanvas();
}
};
canvas.addEventListener("mousedown", handleCanvasMouseDown);
canvas.addEventListener("mouseup", handleCanvasMouseUp);
canvas.addEventListener("mousemove", handleCanvasMouseMove);
return () => {
canvas.removeEventListener("mousedown", handleCanvasMouseDown);
canvas.removeEventListener("mouseup", handleCanvasMouseUp);
canvas.removeEventListener("mousemove", handleCanvasMouseMove);
};
}, [draggingPointIndex, movingRegionIndex, offset, isOpen, info]);
const getMousePos = (canvas, event) => {
const rect = canvas.getBoundingClientRect();
return {
x: event.clientX - rect.left,
y: event.clientY - rect.top,
};
};
const isPointInRegion = (x, y, region) => {
const [A, B, C, D] = region;
const sign = (p1, p2, p3) => (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
const d1 = sign({ x, y }, A, B);
const d2 = sign({ x, y }, B, C);
const d3 = sign({ x, y }, C, D);
const d4 = sign({ x, y }, D, A);
const hasNeg = d1 < 0 || d2 < 0 || d3 < 0 || d4 < 0;
const hasPos = d1 > 0 || d2 > 0 || d3 > 0 || d4 > 0;
return !(hasNeg && hasPos);
};
const drawRedPoint = (canvas, x, y) => {
const ctx = canvas.getContext("2d");
ctx.save();
ctx.beginPath();
ctx.arc(x, y, 5, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.restore();
};
const drawBorder = (canvas, points) => {
const ctx = canvas.getContext("2d");
ctx.save();
ctx.beginPath();
points.forEach((point, index) => {
if (index === 0) {
ctx.moveTo(point.x, point.y);
} else {
ctx.lineTo(point.x, point.y);
}
});
ctx.closePath();
ctx.lineWidth = 2;
ctx.strokeStyle = "blue";
ctx.stroke();
ctx.restore();
points.forEach((point) => drawRedPoint(canvas, point.x, point.y));
};
const drawDeleteButton = (canvas, region, isSelected) => {
const ctx = canvas.getContext("2d");
const buttonX = (region[0].x + region[1].x) / 2;
const buttonY = Math.min(region[0].y, region[1].y, region[2].y, region[3].y) - 20;
ctx.save();
ctx.fillStyle = isSelected ? "rgb(196, 194, 61)" : "rgb(2, 101, 182)";
ctx.fillRect(buttonX - 30, buttonY - 10, 60, 20);
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.font = "13px Arial";
ctx.textAlign = "center";
ctx.fillText(region[0]?.label, buttonX, buttonY + 5);
ctx.restore();
};
const redrawCanvas = (index) => {
const canvas = canvasRef.current;
const ctx = canvas.getContext("2d");
const image = new Image();
image.onload = () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(image, 0, 0);
blurredRegions.current.forEach((region, i) => {
drawBorder(canvas, region);
drawDeleteButton(canvas, region, index === i);
});
points.current.forEach((point) => {
drawRedPoint(canvas, point.x, point.y);
});
};
image.crossOrigin = "anonymous";
image.src = imageSrc;
};
return (
<div style={{ position: "relative" }}>
<canvas ref={canvasRef} />
{isOpen && (
<div style={{ backgroundColor: "#FFF", position: "absolute", top: info?.value[0].y - 200, left: info?.value[0].x, zIndex: 10 }}>
{listLabel?.map((el, i) => (
<div key={i}>
<button
onClick={() => {
const newList = info?.value?.map((pre) => ({ ...pre, label: el?.name }));
blurredRegions.current[info?.index] = newList;
setInfo({});
setIsOpen(false);
redrawCanvas();
}}
style={{ backgroundColor: "#ccc", marginTop: "5px", marginBottom: "5px", width: "150px", color: "#000" }}>
{el?.name}
</button>
</div>
))}
<div>
<button
onClick={() => {
blurredRegions.current.splice(info?.index, 1);
setInfo({});
setIsOpen(false);
redrawCanvas();
}}
style={{ backgroundColor: "#ff0000", marginTop: "5px", marginBottom: "5px", width: "150px", color: "#000" }}>
Delete
</button>
</div>
</div>
)}
</div>
);
};
export default PointBlurImageComponent;

116
src/pages/index.js Normal file
View File

@ -0,0 +1,116 @@
import React, { useRef, useState } from "react";
import PointsBlur from "./components/PointsBlur";
const Main = () => {
const [imageSrc, setImageSrc] = useState(null);
const blurredRegions = useRef([]);
const [loaded, setLoaded] = useState(false);
const [reloading, setReloading] = useState(false);
const [listLabel, setListLabel] = useState([]);
const [infoImage, setInfoImage] = useState({});
const [imageName, setImageName] = useState("");
const handleFileChange = async (event) => {
console.log(event.target.files);
const file = event.target.files[0];
if (!file) return;
const formData = new FormData();
formData.append("image", file);
// setImageSrc(URL.createObjectURL(file));
blurredRegions.current = [];
setLoaded(false);
try {
const url = "http://localhost:5000/detect_image";
const response = await fetch(url, {
method: "POST",
body: formData,
});
const data = await response.json();
if (data.error) {
alert(data.error);
} else {
if (data?.points) {
blurredRegions.current = data?.points?.map((pre) => [
{ x: pre.x1, y: pre.y1, label: pre.label },
{ x: pre.x2, y: pre.y1, label: pre.label },
{ x: pre.x2, y: pre.y2, label: pre.label },
{ x: pre.x1, y: pre.y2, label: pre.label },
]);
}
setListLabel(
Object.entries(data?.labels).map(([id, name]) => ({
id: Number(id),
name,
}))
);
setImageSrc("http://localhost:5000/" + data?.image_path);
setImageName(data?.image_name);
setTimeout(() => setReloading((pre) => !pre), 1000);
console.log(data);
}
} catch (error) {
console.error("Error detecting QR code:", error);
}
};
const handleSave = async () => {
let arrPoints = "";
blurredRegions.current?.forEach((points) => {
const img_w = infoImage?.width;
const img_h = infoImage?.height;
// Get bounding box
const x_min = Math.min(...points.map((p) => p.x));
const y_min = Math.min(...points.map((p) => p.y));
const x_max = Math.max(...points.map((p) => p.x));
const y_max = Math.max(...points.map((p) => p.y));
const x_center = (x_min + x_max) / 2 / img_w;
const y_center = (y_min + y_max) / 2 / img_h;
const width = (x_max - x_min) / img_w;
const height = (y_max - y_min) / img_h;
// Get class ID
const class_id = listLabel.find((label) => label?.name === points[0].label)?.id || "0";
const yolo_label = `${class_id} ${x_center.toFixed(6)} ${y_center.toFixed(6)} ${width.toFixed(6)} ${height.toFixed(6)}`;
arrPoints += yolo_label + "\n";
});
const url = "http://localhost:5000/save";
const formData = new FormData();
formData.append("list", arrPoints);
formData.append("imageName", imageName);
await fetch(url, {
method: "POST",
body: formData,
});
};
return (
<div>
<div>
<input type="file" accept="image/*" onChange={handleFileChange} />
<button style={{}} onClick={handleSave}>
Save
</button>
</div>
<div>
<PointsBlur
imageSrc={imageSrc}
blurredRegions={blurredRegions}
loaded={loaded}
setLoaded={setLoaded}
reloading={reloading}
setReloading={setReloading}
setInfoImage={setInfoImage}
listLabel={listLabel}
/>
</div>
</div>
);
};
export default Main;

13
src/reportWebVitals.js Normal file
View File

@ -0,0 +1,13 @@
const reportWebVitals = onPerfEntry => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

View File

@ -0,0 +1,20 @@
1 0.846875 0.679733 0.102500 0.046706
1 0.399687 0.411593 0.091875 0.032527
1 0.394375 0.494579 0.096250 0.036697
1 0.380000 0.703086 0.107500 0.041701
1 0.384062 0.592160 0.104375 0.041701
0 0.751563 0.582152 0.038125 0.031693
0 0.302187 0.718098 0.043125 0.031693
0 0.324688 0.505421 0.038125 0.028357
0 0.725938 0.486239 0.036875 0.028357
0 0.334375 0.416597 0.035000 0.025855
0 0.774687 0.688907 0.039375 0.036697
1 0.399375 0.333194 0.090000 0.032527
0 0.310000 0.603003 0.038750 0.031693
0 0.697187 0.325271 0.033125 0.020017
0 0.703125 0.401168 0.032500 0.025021
0 0.336875 0.337364 0.035000 0.022519
1 0.792500 0.481234 0.092500 0.033361
1 0.820937 0.572560 0.100625 0.040867
1 0.767188 0.397832 0.075000 0.023353
1 0.757813 0.321518 0.073750 0.027523

93
src/server/main.py Normal file
View File

@ -0,0 +1,93 @@
from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import cv2
import numpy as np
from pyzbar.pyzbar import decode
from ultralytics import YOLO
import datetime
from PIL import Image
import os
# Load model đã huấn luyện
model = YOLO("train5/weights/best.pt")
app = Flask(__name__)
CORS(app)
# Ensure the directory exists
os.makedirs("label", exist_ok=True)
os.makedirs("images", exist_ok=True)
@app.route('/detect_image', methods=['POST'])
def detect_image():
file = request.files.get('image')
if not file:
return jsonify({"error": "No file uploaded"}), 400
# Open the image using PIL
try:
image = Image.open(file)
except Exception as e:
return jsonify({"error": "Invalid image file", "details": str(e)}), 400
# Check image size
min_width, min_height = 500, 500
if image.width < min_width or image.height < min_height:
return jsonify({"error": f"Image is too small. Minimum size is {min_width}x{min_height} pixels."}), 400
# Reset file pointer before saving
file.seek(0)
basename = "detect_image"
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
image_name = "_".join([basename, suffix]) # e.g. 'detect_image_120508_171442'
image_path = os.path.join("images", image_name) + ".png"
file.save(image_path)
# Chạy mô hình để dự đoán
results = model(image_path, conf=0.6) # Hạ conf xuống để giữ nhiều phát hiện hơn
points = []
# Xử lý kết quả dự đoán
for r in results:
for box in r.boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0]) # Lấy tọa độ bbox
# print(x1, y1, x2, y2)
# print(model.names)
conf = float(box.conf[0]) # Độ tin cậy
cls = int(box.cls[0]) # Nhãn class ID
# label = f"{model.names[cls]} {conf:.2f}" # Tạo nhãn hiển thị
points.append({'label': model.names[cls],'x1':x1, "y1":y1, "x2":x2, "y2":y2})
result = {
"image_name": image_name,
"image_path": image_path,
"labels": model.names,
"points": points
}
return jsonify(result)
# Serve images from the "images" directory
@app.route('/images/<filename>')
def get_image(filename):
return send_from_directory("images", filename)
@app.route('/save', methods=['POST'])
def save_data():
# Get form data
arr_points = request.form.get("list") # This will be a string
image_name = request.form.get("imageName") # This will be a string
if not arr_points or not image_name:
return jsonify({"error": "Missing required fields"}), 400
# Define the file path
file_path = os.path.join("label", f"{image_name}.txt")
arr_points=arr_points.replace("\r\n", "\n")
# Save the data to a text file
with open(file_path, "w") as file:
file.write(arr_points) # Write the points directly to the file
return jsonify({"success": True, "list": arr_points, "imageName": image_name})
if __name__ == '__main__':
app.run(debug=True)

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

106
src/server/train5/args.yaml Normal file
View File

@ -0,0 +1,106 @@
task: detect
mode: train
model: yolov8s.pt
data: dataset/data.yaml
epochs: 160
time: null
patience: 100
batch: 16
imgsz: 640
save: true
save_period: -1
cache: false
device: 0
workers: 8
project: null
name: train5
exist_ok: false
pretrained: true
optimizer: auto
verbose: true
seed: 0
deterministic: true
single_cls: false
rect: false
cos_lr: false
close_mosaic: 10
resume: false
amp: true
fraction: 1.0
profile: false
freeze: null
multi_scale: false
overlap_mask: true
mask_ratio: 4
dropout: 0.0
val: true
split: val
save_json: false
save_hybrid: false
conf: null
iou: 0.7
max_det: 300
half: false
dnn: false
plots: true
source: null
vid_stride: 1
stream_buffer: false
visualize: false
augment: true
agnostic_nms: false
classes: null
retina_masks: false
embed: null
show: false
save_frames: false
save_txt: false
save_conf: false
save_crop: false
show_labels: true
show_conf: true
show_boxes: true
line_width: null
format: torchscript
keras: false
optimize: false
int8: false
dynamic: false
simplify: true
opset: null
workspace: null
nms: false
lr0: 0.01
lrf: 0.01
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3.0
warmup_momentum: 0.8
warmup_bias_lr: 0.1
box: 7.5
cls: 0.5
dfl: 1.5
pose: 12.0
kobj: 1.0
nbs: 64
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
degrees: 0.0
translate: 0.1
scale: 0.5
shear: 0.0
perspective: 0.0
flipud: 0.0
fliplr: 0.5
bgr: 0.0
mosaic: 1.0
mixup: 0.0
copy_paste: 0.0
copy_paste_mode: flip
auto_augment: randaugment
erasing: 0.4
crop_fraction: 1.0
cfg: null
tracker: botsort.yaml
save_dir: runs\detect\train5

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

View File

@ -0,0 +1,161 @@
epoch,time,train/box_loss,train/cls_loss,train/dfl_loss,metrics/precision(B),metrics/recall(B),metrics/mAP50(B),metrics/mAP50-95(B),val/box_loss,val/cls_loss,val/dfl_loss,lr/pg0,lr/pg1,lr/pg2
1,79.1933,2.78972,4.44628,2.12907,0.15445,0.14782,0.05836,0.02486,2.52962,4.3884,1.91694,0.00010002,0.00010002,0.00010002
2,144.015,1.9768,2.40754,1.5545,0.36569,0.30455,0.27732,0.13269,2.01444,5.07115,1.54205,0.000215369,0.000215369,0.000215369
3,206.692,1.6134,1.60154,1.27456,0.30541,0.40677,0.27209,0.11818,1.99143,5.53868,1.36902,0.000329274,0.000329274,0.000329274
4,268.582,1.48135,1.36632,1.23644,0.3252,0.43279,0.2584,0.10066,1.96687,5.73747,1.39107,0.000441735,0.000441735,0.000441735
5,326.137,1.43483,1.15795,1.16429,0.37892,0.52973,0.40573,0.18491,1.71286,3.76249,1.24096,0.000552752,0.000552752,0.000552752
6,388.234,1.43492,1.09798,1.13823,0.72049,0.60939,0.64416,0.2947,1.69634,1.91279,1.2273,0.000662325,0.000662325,0.000662325
7,445.281,1.33431,1.02936,1.14837,0.73183,0.60013,0.65032,0.2987,1.63669,1.5883,1.20259,0.000770454,0.000770454,0.000770454
8,506.372,1.2916,1.01829,1.11674,0.7108,0.65074,0.68625,0.34205,1.65696,1.56233,1.21404,0.000877139,0.000877139,0.000877139
9,569.872,1.31553,0.94648,1.10654,0.72875,0.67728,0.72759,0.34354,1.66518,1.52133,1.2041,0.00098238,0.00098238,0.00098238
10,638.18,1.32363,0.96571,1.0975,0.74238,0.66975,0.71712,0.31861,1.71736,1.49562,1.22666,0.00108618,0.00108618,0.00108618
11,701.803,1.36021,0.94246,1.12022,0.81302,0.68465,0.77636,0.38204,1.76944,1.43291,1.26237,0.00118853,0.00118853,0.00118853
12,765.114,1.32723,0.88843,1.0837,0.74187,0.67199,0.69819,0.33105,1.80908,1.37111,1.32784,0.00128944,0.00128944,0.00128944
13,829.501,1.24953,0.81147,1.07581,0.76565,0.65021,0.70053,0.32435,1.76769,1.42398,1.28511,0.0013889,0.0013889,0.0013889
14,894.03,1.26858,0.80531,1.09355,0.74265,0.68729,0.73206,0.34576,1.63389,1.30855,1.18428,0.00148692,0.00148692,0.00148692
15,955.049,1.21632,0.77086,1.08167,0.79219,0.74979,0.76177,0.37204,1.63777,1.23204,1.16168,0.0015226,0.0015226,0.0015226
16,1019.56,1.31248,0.82856,1.05906,0.73266,0.69305,0.72439,0.37582,1.56233,1.24568,1.13402,0.00151228,0.00151228,0.00151228
17,1086.82,1.22378,0.82395,1.06851,0.74056,0.66704,0.69789,0.34841,1.61637,1.26108,1.15269,0.00150197,0.00150197,0.00150197
18,1146.14,1.19671,0.81487,1.07749,0.75402,0.59642,0.69003,0.35527,1.5438,1.34319,1.1336,0.00149165,0.00149165,0.00149165
19,1207.3,1.18703,0.73238,1.05733,0.81832,0.76482,0.79766,0.40821,1.58984,1.16461,1.15089,0.00148134,0.00148134,0.00148134
20,1267.32,1.22573,0.73551,1.02884,0.85167,0.75877,0.81816,0.43895,1.55012,1.09675,1.17802,0.00147102,0.00147102,0.00147102
21,1340.81,1.25475,0.81837,1.08595,0.8392,0.78796,0.80158,0.42897,1.52718,1.04111,1.1715,0.00146071,0.00146071,0.00146071
22,1407.52,1.20925,0.75103,1.05671,0.84815,0.74709,0.79267,0.38087,1.57295,1.10258,1.21634,0.00145039,0.00145039,0.00145039
23,1473.3,1.17116,0.71652,1.04478,0.87197,0.74777,0.82292,0.41326,1.56537,1.01333,1.16036,0.00144008,0.00144008,0.00144008
24,1536.23,1.13285,0.66772,1.03978,0.87356,0.68617,0.79532,0.45129,1.4998,1.09128,1.14806,0.00142977,0.00142977,0.00142977
25,1596.6,1.21552,0.71953,1.05828,0.84945,0.70952,0.79947,0.43768,1.53111,1.13395,1.14834,0.00141945,0.00141945,0.00141945
26,1656.97,1.13669,0.66401,1.04418,0.82889,0.73344,0.78144,0.41668,1.59603,1.1384,1.15567,0.00140914,0.00140914,0.00140914
27,1721.43,1.16942,0.67131,1.03605,0.83167,0.7159,0.74711,0.4047,1.53652,1.22678,1.136,0.00139882,0.00139882,0.00139882
28,1786.57,1.15576,0.65297,1.04957,0.8689,0.70189,0.77759,0.419,1.56037,1.08989,1.16347,0.00138851,0.00138851,0.00138851
29,1850.82,1.13333,0.6457,1.01154,0.86735,0.73769,0.80355,0.42021,1.59925,1.01278,1.20663,0.00137819,0.00137819,0.00137819
30,1909.09,1.15414,0.65726,1.01882,0.83527,0.73015,0.77426,0.38296,1.64003,1.08129,1.20249,0.00136788,0.00136788,0.00136788
31,1965.81,1.11568,0.64661,0.99754,0.84099,0.71629,0.75998,0.37791,1.64049,1.1301,1.19671,0.00135756,0.00135756,0.00135756
32,2024.34,1.1059,0.639,1.01337,0.80012,0.81201,0.83321,0.41939,1.60792,1.00363,1.20414,0.00134725,0.00134725,0.00134725
33,2087.38,1.08118,0.65677,1.02235,0.81546,0.81039,0.83209,0.4208,1.62292,0.9894,1.2161,0.00133693,0.00133693,0.00133693
34,2148.35,1.05526,0.58841,0.97786,0.79394,0.81044,0.82824,0.42564,1.6099,0.97195,1.2228,0.00132662,0.00132662,0.00132662
35,2207.34,1.0814,0.62037,1.00916,0.81265,0.79526,0.82306,0.4061,1.67906,1.05719,1.26155,0.0013163,0.0013163,0.0013163
36,2266.07,1.03936,0.6256,1.01271,0.85109,0.78313,0.84651,0.4477,1.59411,0.96316,1.21123,0.00130599,0.00130599,0.00130599
37,2330.3,1.10196,0.63687,0.99742,0.85998,0.80409,0.86822,0.46085,1.52489,0.87966,1.16047,0.00129568,0.00129568,0.00129568
38,2389.43,1.09974,0.62003,0.98314,0.78886,0.84155,0.87775,0.47678,1.46115,0.90059,1.10349,0.00128536,0.00128536,0.00128536
39,2442.59,1.0649,0.61785,1.01021,0.84493,0.73686,0.81213,0.4527,1.47702,0.97683,1.10445,0.00127505,0.00127505,0.00127505
40,2499.96,1.08902,0.60489,0.9936,0.81723,0.76167,0.79881,0.42306,1.54057,1.03318,1.13928,0.00126473,0.00126473,0.00126473
41,2559.36,1.07171,0.61051,1.00153,0.76994,0.79922,0.81643,0.43151,1.49266,0.97571,1.12973,0.00125442,0.00125442,0.00125442
42,2613.89,1.02256,0.56022,0.97611,0.8244,0.81279,0.84997,0.4816,1.42513,0.89275,1.09134,0.0012441,0.0012441,0.0012441
43,2674.07,1.05683,0.56238,0.99438,0.82951,0.8144,0.8675,0.49035,1.44798,0.95263,1.11568,0.00123379,0.00123379,0.00123379
44,2734.98,1.02716,0.56554,0.9727,0.88832,0.80965,0.86946,0.49677,1.44353,0.90131,1.10485,0.00122347,0.00122347,0.00122347
45,2804.25,0.9922,0.56205,0.96851,0.90123,0.80454,0.87632,0.51068,1.40745,0.88131,1.09512,0.00121316,0.00121316,0.00121316
46,2872.72,1.01907,0.56211,0.95705,0.88324,0.84067,0.87831,0.51432,1.42503,0.8497,1.11045,0.00120284,0.00120284,0.00120284
47,2935.88,0.99557,0.56648,0.96885,0.85152,0.81621,0.86948,0.51424,1.40815,0.96053,1.08512,0.00119253,0.00119253,0.00119253
48,3002.58,1.02267,0.56571,0.98022,0.89158,0.73889,0.8474,0.48651,1.41888,1.05662,1.10761,0.00118222,0.00118222,0.00118222
49,3075.33,1.0152,0.56551,0.97089,0.8842,0.74283,0.84295,0.46968,1.46149,1.07461,1.13234,0.0011719,0.0011719,0.0011719
50,3140.21,1.00589,0.56076,0.98049,0.88172,0.73785,0.83619,0.47201,1.44356,1.06744,1.11786,0.00116159,0.00116159,0.00116159
51,3203.68,0.94482,0.53004,0.95271,0.82871,0.77199,0.82516,0.4583,1.42868,1.11943,1.10539,0.00115127,0.00115127,0.00115127
52,3263.78,0.97737,0.53555,0.95427,0.85761,0.73881,0.80761,0.4613,1.4313,1.17755,1.08101,0.00114096,0.00114096,0.00114096
53,3331.97,1.01495,0.56454,0.98778,0.86385,0.73227,0.80137,0.48089,1.38741,1.13637,1.07088,0.00113064,0.00113064,0.00113064
54,3413.58,0.94196,0.53715,0.95638,0.90088,0.75414,0.82182,0.48357,1.46466,1.0487,1.12904,0.00112033,0.00112033,0.00112033
55,3493.73,1.0123,0.55747,0.96089,0.84736,0.8026,0.81626,0.43752,1.57682,1.11097,1.17613,0.00111001,0.00111001,0.00111001
56,3570.75,0.9974,0.55304,0.96129,0.83718,0.79393,0.83064,0.44948,1.53084,1.03905,1.16444,0.0010997,0.0010997,0.0010997
57,3665.83,0.98177,0.53568,0.9548,0.83175,0.78525,0.83499,0.45103,1.55878,1.00985,1.17559,0.00108938,0.00108938,0.00108938
58,3735.05,0.94241,0.52072,0.93103,0.8808,0.73896,0.82644,0.45575,1.53745,1.02492,1.15056,0.00107907,0.00107907,0.00107907
59,3795.92,0.91156,0.51309,0.9365,0.88278,0.77035,0.83347,0.46175,1.54233,1.01675,1.16275,0.00106876,0.00106876,0.00106876
60,3860.37,0.92004,0.51161,0.95411,0.86222,0.78873,0.85862,0.47488,1.54815,0.9485,1.16171,0.00105844,0.00105844,0.00105844
61,3927.86,0.95472,0.52462,0.95675,0.85129,0.77895,0.85322,0.47763,1.52768,0.9512,1.14642,0.00104813,0.00104813,0.00104813
62,3990.79,0.90886,0.49487,0.94372,0.89962,0.73995,0.84626,0.46073,1.62276,1.03266,1.18278,0.00103781,0.00103781,0.00103781
63,4049.75,0.95907,0.53303,0.95493,0.89966,0.73131,0.84914,0.47875,1.54124,1.00341,1.17293,0.0010275,0.0010275,0.0010275
64,4106.56,0.9478,0.5117,0.96615,0.89467,0.7724,0.86173,0.47643,1.53408,0.9542,1.15634,0.00101718,0.00101718,0.00101718
65,4167.55,0.92725,0.49707,0.93224,0.89332,0.77382,0.86775,0.49434,1.50135,0.96686,1.12619,0.00100687,0.00100687,0.00100687
66,4222.22,0.8928,0.49489,0.92333,0.88349,0.7791,0.8533,0.5184,1.39522,0.97572,1.08409,0.000996553,0.000996553,0.000996553
67,4286.54,0.89278,0.50173,0.9482,0.88114,0.74578,0.82551,0.47459,1.51922,1.08469,1.14589,0.000986239,0.000986239,0.000986239
68,4352.18,0.91221,0.48714,0.94274,0.86239,0.77878,0.83523,0.48605,1.47504,1.0137,1.14348,0.000975924,0.000975924,0.000975924
69,4416.98,0.92513,0.49839,0.95058,0.86091,0.77408,0.83701,0.4823,1.48431,1.01609,1.14506,0.00096561,0.00096561,0.00096561
70,4481.69,0.9265,0.50412,0.95827,0.87352,0.78358,0.85596,0.47859,1.54724,0.96492,1.16844,0.000955295,0.000955295,0.000955295
71,4542.47,0.89838,0.47947,0.92774,0.85109,0.77592,0.84825,0.47895,1.52074,1.0106,1.15359,0.000944981,0.000944981,0.000944981
72,4603.38,0.87928,0.48419,0.95831,0.84854,0.77573,0.85815,0.49402,1.4566,0.98823,1.11956,0.000934666,0.000934666,0.000934666
73,4686.7,0.89509,0.48605,0.92495,0.86615,0.7724,0.86459,0.49602,1.4684,0.96349,1.12419,0.000924352,0.000924352,0.000924352
74,4782.55,0.88792,0.47804,0.91287,0.88533,0.76409,0.86409,0.49936,1.45706,0.95254,1.13382,0.000914037,0.000914037,0.000914037
75,4872.94,0.87717,0.47324,0.93148,0.88217,0.75832,0.85136,0.49748,1.45607,0.99171,1.11589,0.000903722,0.000903722,0.000903722
76,4964.16,0.88961,0.4978,0.95116,0.86426,0.74936,0.84268,0.48786,1.46865,1.02714,1.12557,0.000893408,0.000893408,0.000893408
77,5063.38,0.91309,0.49079,0.92397,0.86638,0.76058,0.84389,0.47776,1.49456,1.04264,1.14549,0.000883093,0.000883093,0.000883093
78,5149.52,0.89989,0.47623,0.92064,0.87926,0.77507,0.84856,0.49483,1.45886,1.01439,1.13391,0.000872779,0.000872779,0.000872779
79,5230.83,0.8793,0.46789,0.91475,0.92054,0.74956,0.85493,0.49965,1.47806,1.02069,1.14405,0.000862464,0.000862464,0.000862464
80,5294.29,0.87532,0.47277,0.93447,0.87783,0.7786,0.85332,0.4987,1.48879,1.01274,1.16473,0.00085215,0.00085215,0.00085215
81,5372.67,0.89327,0.48524,0.92567,0.8579,0.80376,0.85352,0.50544,1.4667,1.00378,1.14981,0.000841835,0.000841835,0.000841835
82,5455.1,0.87699,0.48324,0.92144,0.87107,0.78965,0.85643,0.48865,1.50073,1.00175,1.14528,0.00083152,0.00083152,0.00083152
83,5536.28,0.85218,0.47155,0.92067,0.90141,0.76111,0.85754,0.50609,1.43454,0.95541,1.12228,0.000821206,0.000821206,0.000821206
84,5606.04,0.84978,0.4512,0.91087,0.89474,0.74689,0.83767,0.4886,1.47975,1.05443,1.13804,0.000810891,0.000810891,0.000810891
85,5692.85,0.81845,0.44907,0.89669,0.89146,0.72608,0.81907,0.4773,1.50038,1.12614,1.13774,0.000800577,0.000800577,0.000800577
86,5765.9,0.79971,0.44651,0.91734,0.89898,0.71673,0.8074,0.48507,1.45897,1.13989,1.11424,0.000790262,0.000790262,0.000790262
87,5818.83,0.82762,0.45254,0.9196,0.89978,0.69257,0.79178,0.47209,1.48032,1.15014,1.12438,0.000779948,0.000779948,0.000779948
88,5872.18,0.85257,0.4565,0.9099,0.89074,0.7137,0.80221,0.48212,1.41506,1.05222,1.10373,0.000769633,0.000769633,0.000769633
89,5954.08,0.84912,0.4572,0.9087,0.88648,0.7257,0.81562,0.49914,1.36928,0.97158,1.08567,0.000759318,0.000759318,0.000759318
90,6027.31,0.85146,0.45215,0.90956,0.88013,0.77079,0.86089,0.51643,1.39218,0.88963,1.09865,0.000749004,0.000749004,0.000749004
91,6112.29,0.81797,0.44364,0.90243,0.86222,0.82662,0.88341,0.50837,1.46039,0.85144,1.13782,0.000738689,0.000738689,0.000738689
92,6198.37,0.83892,0.44542,0.92215,0.87767,0.81513,0.87715,0.52601,1.39735,0.85518,1.11573,0.000728375,0.000728375,0.000728375
93,6295.3,0.86043,0.46378,0.91471,0.85171,0.83189,0.87002,0.52874,1.39665,0.88683,1.11991,0.00071806,0.00071806,0.00071806
94,6381.76,0.82842,0.45414,0.9117,0.89507,0.80857,0.85285,0.50811,1.42017,0.9341,1.12234,0.000707746,0.000707746,0.000707746
95,6444.66,0.81903,0.43287,0.89898,0.89684,0.79686,0.84173,0.49246,1.4492,0.9732,1.13837,0.000697431,0.000697431,0.000697431
96,6502.26,0.84115,0.4502,0.90791,0.89696,0.78214,0.82814,0.49477,1.43476,1.00993,1.13288,0.000687117,0.000687117,0.000687117
97,6571.32,0.85867,0.44822,0.89326,0.88704,0.7823,0.82823,0.49829,1.42715,1.01662,1.13027,0.000676802,0.000676802,0.000676802
98,6634.82,0.80855,0.44512,0.91555,0.8892,0.78796,0.84685,0.49211,1.46855,0.96526,1.16313,0.000666487,0.000666487,0.000666487
99,6689.86,0.82724,0.4381,0.90312,0.87534,0.8083,0.86822,0.51027,1.43357,0.88064,1.15871,0.000656173,0.000656173,0.000656173
100,6744.4,0.80057,0.43515,0.89791,0.87713,0.7927,0.8587,0.50578,1.44704,0.93536,1.14457,0.000645858,0.000645858,0.000645858
101,6809.13,0.79881,0.42616,0.89512,0.88104,0.77246,0.85438,0.50168,1.46296,0.97746,1.14407,0.000635544,0.000635544,0.000635544
102,6868.32,0.80666,0.43615,0.92248,0.87855,0.77536,0.85596,0.49148,1.47554,0.98961,1.14676,0.000625229,0.000625229,0.000625229
103,6931.04,0.85606,0.45226,0.89806,0.89684,0.77928,0.86276,0.50759,1.4298,0.92478,1.12425,0.000614915,0.000614915,0.000614915
104,6986.06,0.79998,0.43726,0.89334,0.89574,0.78084,0.85245,0.51396,1.41363,0.92485,1.11765,0.0006046,0.0006046,0.0006046
105,7048.41,0.79064,0.41766,0.89185,0.87617,0.77795,0.84539,0.51186,1.41352,0.94527,1.12021,0.000594286,0.000594286,0.000594286
106,7106.27,0.73175,0.41392,0.89594,0.88759,0.754,0.83939,0.5163,1.39709,0.97677,1.1127,0.000583971,0.000583971,0.000583971
107,7158.96,0.79688,0.42984,0.88138,0.89642,0.73065,0.82522,0.51469,1.39299,1.03874,1.10165,0.000573656,0.000573656,0.000573656
108,9141.64,0.77176,0.42634,0.90028,0.87741,0.74456,0.83308,0.51626,1.40735,1.03697,1.11141,0.000563342,0.000563342,0.000563342
109,9202.9,0.74907,0.40643,0.8906,0.86035,0.76184,0.83868,0.51851,1.41075,1.03832,1.12088,0.000553027,0.000553027,0.000553027
110,9256.27,0.7389,0.41463,0.87498,0.85567,0.77224,0.83979,0.51339,1.41225,1.04125,1.12486,0.000542713,0.000542713,0.000542713
111,9309.27,0.71814,0.39574,0.88681,0.86482,0.78196,0.83978,0.509,1.4336,1.05185,1.13176,0.000532398,0.000532398,0.000532398
112,9365.68,0.75555,0.4005,0.8802,0.86272,0.77609,0.84114,0.51458,1.40812,1.04276,1.12473,0.000522084,0.000522084,0.000522084
113,9427.52,0.73819,0.39692,0.87908,0.86019,0.77669,0.84036,0.51588,1.40349,1.0195,1.12516,0.000511769,0.000511769,0.000511769
114,9480.57,0.75334,0.40286,0.88,0.87553,0.76213,0.84161,0.50298,1.43416,1.03579,1.1364,0.000501454,0.000501454,0.000501454
115,9535.52,0.71741,0.40709,0.88379,0.87534,0.76236,0.83011,0.49302,1.47118,1.0716,1.15247,0.00049114,0.00049114,0.00049114
116,9587.07,0.73907,0.40472,0.90054,0.85779,0.77663,0.82938,0.49242,1.46578,1.0339,1.15246,0.000480825,0.000480825,0.000480825
117,9646.85,0.72063,0.39483,0.87592,0.86439,0.78181,0.83759,0.50283,1.45191,1.00848,1.14853,0.000470511,0.000470511,0.000470511
118,9702.89,0.75835,0.40081,0.89469,0.86394,0.80194,0.84069,0.51123,1.43509,0.97228,1.14162,0.000460196,0.000460196,0.000460196
119,11987.1,0.74135,0.40808,0.87484,0.87787,0.77576,0.84053,0.5033,1.4468,0.95905,1.14214,0.000449882,0.000449882,0.000449882
120,12043.5,0.73075,0.40209,0.88475,0.87602,0.77261,0.83872,0.50132,1.43458,0.93607,1.13697,0.000439567,0.000439567,0.000439567
121,12103.3,0.73694,0.41317,0.88506,0.87835,0.76905,0.84238,0.50442,1.43599,0.93077,1.13804,0.000429253,0.000429253,0.000429253
122,12163,0.74751,0.40979,0.88821,0.89008,0.77371,0.85662,0.52003,1.40988,0.92203,1.12526,0.000418938,0.000418938,0.000418938
123,12232.9,0.71831,0.38944,0.87757,0.90651,0.76895,0.86124,0.53448,1.38131,0.96026,1.10849,0.000408623,0.000408623,0.000408623
124,12327.3,0.73282,0.39492,0.87868,0.90952,0.76854,0.85966,0.52842,1.40381,0.98494,1.12945,0.000398309,0.000398309,0.000398309
125,12422.9,0.73621,0.40186,0.89345,0.89322,0.77919,0.854,0.52556,1.40471,0.98762,1.13634,0.000387994,0.000387994,0.000387994
126,12501.9,0.66706,0.37401,0.87079,0.8923,0.77817,0.84959,0.52795,1.39196,0.99186,1.13554,0.00037768,0.00037768,0.00037768
127,12580.5,0.702,0.38536,0.86504,0.89254,0.77677,0.84727,0.53184,1.37799,1.00403,1.12626,0.000367365,0.000367365,0.000367365
128,12656.3,0.71482,0.39346,0.88107,0.8952,0.77471,0.84897,0.51971,1.40017,1.01947,1.12457,0.000357051,0.000357051,0.000357051
129,12721.7,0.66264,0.38726,0.86829,0.89192,0.77911,0.85083,0.51729,1.41471,1.0196,1.12969,0.000346736,0.000346736,0.000346736
130,12783.9,0.72436,0.38713,0.88422,0.90839,0.77005,0.85353,0.52001,1.42579,1.01278,1.13795,0.000336421,0.000336421,0.000336421
131,12850.3,0.70487,0.38277,0.87381,0.91595,0.76888,0.85535,0.51653,1.44274,0.9948,1.14897,0.000326107,0.000326107,0.000326107
132,12917.6,0.69815,0.38489,0.87641,0.92035,0.77284,0.85644,0.51712,1.44863,1.00093,1.15526,0.000315792,0.000315792,0.000315792
133,12993.4,0.70362,0.38084,0.88123,0.9212,0.77433,0.86192,0.51986,1.44352,0.98016,1.15681,0.000305478,0.000305478,0.000305478
134,13059.6,0.66337,0.36126,0.86619,0.91509,0.77895,0.86423,0.52054,1.42391,0.95888,1.15263,0.000295163,0.000295163,0.000295163
135,13121.3,0.706,0.38323,0.88332,0.90915,0.77895,0.86703,0.51757,1.42849,0.96224,1.15048,0.000284849,0.000284849,0.000284849
136,13187.1,0.71043,0.38211,0.88005,0.88339,0.78911,0.8676,0.51902,1.43426,0.98051,1.14425,0.000274534,0.000274534,0.000274534
137,13253.2,0.69473,0.37104,0.85851,0.90254,0.77186,0.86565,0.52428,1.42088,0.97809,1.13567,0.00026422,0.00026422,0.00026422
138,13318.1,0.67577,0.36656,0.86718,0.91877,0.76184,0.86163,0.52486,1.41129,0.95833,1.13302,0.000253905,0.000253905,0.000253905
139,13385.7,0.67721,0.37273,0.85745,0.9168,0.76533,0.86296,0.52289,1.40551,0.95632,1.1371,0.00024359,0.00024359,0.00024359
140,13446.9,0.6517,0.35944,0.8508,0.93201,0.75762,0.86115,0.51662,1.41534,0.96643,1.14789,0.000233276,0.000233276,0.000233276
141,13517.6,0.64047,0.36936,0.87333,0.93111,0.75716,0.85652,0.51348,1.4202,0.97294,1.15299,0.000222961,0.000222961,0.000222961
142,13588.4,0.69888,0.36964,0.85824,0.93221,0.75033,0.8491,0.51534,1.41669,0.98704,1.15152,0.000212647,0.000212647,0.000212647
143,13643.9,0.71185,0.38358,0.87189,0.9116,0.76291,0.84427,0.51323,1.4192,1.01136,1.14921,0.000202332,0.000202332,0.000202332
144,13719.1,0.64623,0.37055,0.86985,0.91056,0.75913,0.84392,0.51516,1.41387,1.02121,1.15224,0.000192018,0.000192018,0.000192018
145,13784.5,0.66081,0.36438,0.86632,0.9132,0.75848,0.84315,0.51483,1.41336,1.03125,1.1529,0.000181703,0.000181703,0.000181703
146,13848.7,0.65745,0.36182,0.86139,0.90329,0.76888,0.84926,0.51381,1.42007,1.03542,1.15488,0.000171388,0.000171388,0.000171388
147,13908.1,0.63479,0.3514,0.86504,0.90576,0.77036,0.85147,0.5178,1.42078,1.03178,1.15807,0.000161074,0.000161074,0.000161074
148,13968.4,0.63422,0.35394,0.85725,0.92578,0.75862,0.847,0.51962,1.40845,1.0179,1.15255,0.000150759,0.000150759,0.000150759
149,14035.5,0.63601,0.3558,0.86482,0.92678,0.75973,0.84713,0.52163,1.40363,1.01592,1.14974,0.000140445,0.000140445,0.000140445
150,14095.4,0.64997,0.3542,0.86655,0.9277,0.76004,0.84939,0.52168,1.40087,1.01682,1.14528,0.00013013,0.00013013,0.00013013
151,14167.3,0.6073,0.33399,0.83538,0.9194,0.75667,0.85041,0.52062,1.40043,1.00815,1.14091,0.000119816,0.000119816,0.000119816
152,14226.8,0.60694,0.32863,0.85148,0.92139,0.75641,0.85336,0.51838,1.39753,0.98436,1.13874,0.000109501,0.000109501,0.000109501
153,14292.6,0.63423,0.33211,0.84596,0.90534,0.7674,0.85652,0.51828,1.40057,0.97746,1.14122,9.91865e-05,9.91865e-05,9.91865e-05
154,14359.1,0.60499,0.3303,0.84005,0.91644,0.75894,0.85333,0.51454,1.40884,0.9768,1.14537,8.88719e-05,8.88719e-05,8.88719e-05
155,14413.1,0.60577,0.32443,0.85879,0.91596,0.75152,0.8492,0.51537,1.41607,0.98924,1.14939,7.85574e-05,7.85574e-05,7.85574e-05
156,14473.2,0.58913,0.31256,0.84404,0.91876,0.74804,0.8443,0.51521,1.41711,1.00052,1.1496,6.82428e-05,6.82428e-05,6.82428e-05
157,14542.2,0.5716,0.31241,0.8388,0.91502,0.74473,0.84185,0.51392,1.41308,1.00065,1.14791,5.79283e-05,5.79283e-05,5.79283e-05
158,14606.5,0.60144,0.32608,0.84324,0.9115,0.74515,0.83827,0.51145,1.41112,1.01063,1.14756,4.76137e-05,4.76137e-05,4.76137e-05
159,14661.6,0.58397,0.30936,0.84704,0.90965,0.74982,0.8377,0.51232,1.41159,1.02043,1.14842,3.72991e-05,3.72991e-05,3.72991e-05
160,14722.2,0.57349,0.31213,0.8455,0.89784,0.75784,0.83713,0.51123,1.41148,1.02603,1.14819,2.69846e-05,2.69846e-05,2.69846e-05
1 epoch time train/box_loss train/cls_loss train/dfl_loss metrics/precision(B) metrics/recall(B) metrics/mAP50(B) metrics/mAP50-95(B) val/box_loss val/cls_loss val/dfl_loss lr/pg0 lr/pg1 lr/pg2
2 1 79.1933 2.78972 4.44628 2.12907 0.15445 0.14782 0.05836 0.02486 2.52962 4.3884 1.91694 0.00010002 0.00010002 0.00010002
3 2 144.015 1.9768 2.40754 1.5545 0.36569 0.30455 0.27732 0.13269 2.01444 5.07115 1.54205 0.000215369 0.000215369 0.000215369
4 3 206.692 1.6134 1.60154 1.27456 0.30541 0.40677 0.27209 0.11818 1.99143 5.53868 1.36902 0.000329274 0.000329274 0.000329274
5 4 268.582 1.48135 1.36632 1.23644 0.3252 0.43279 0.2584 0.10066 1.96687 5.73747 1.39107 0.000441735 0.000441735 0.000441735
6 5 326.137 1.43483 1.15795 1.16429 0.37892 0.52973 0.40573 0.18491 1.71286 3.76249 1.24096 0.000552752 0.000552752 0.000552752
7 6 388.234 1.43492 1.09798 1.13823 0.72049 0.60939 0.64416 0.2947 1.69634 1.91279 1.2273 0.000662325 0.000662325 0.000662325
8 7 445.281 1.33431 1.02936 1.14837 0.73183 0.60013 0.65032 0.2987 1.63669 1.5883 1.20259 0.000770454 0.000770454 0.000770454
9 8 506.372 1.2916 1.01829 1.11674 0.7108 0.65074 0.68625 0.34205 1.65696 1.56233 1.21404 0.000877139 0.000877139 0.000877139
10 9 569.872 1.31553 0.94648 1.10654 0.72875 0.67728 0.72759 0.34354 1.66518 1.52133 1.2041 0.00098238 0.00098238 0.00098238
11 10 638.18 1.32363 0.96571 1.0975 0.74238 0.66975 0.71712 0.31861 1.71736 1.49562 1.22666 0.00108618 0.00108618 0.00108618
12 11 701.803 1.36021 0.94246 1.12022 0.81302 0.68465 0.77636 0.38204 1.76944 1.43291 1.26237 0.00118853 0.00118853 0.00118853
13 12 765.114 1.32723 0.88843 1.0837 0.74187 0.67199 0.69819 0.33105 1.80908 1.37111 1.32784 0.00128944 0.00128944 0.00128944
14 13 829.501 1.24953 0.81147 1.07581 0.76565 0.65021 0.70053 0.32435 1.76769 1.42398 1.28511 0.0013889 0.0013889 0.0013889
15 14 894.03 1.26858 0.80531 1.09355 0.74265 0.68729 0.73206 0.34576 1.63389 1.30855 1.18428 0.00148692 0.00148692 0.00148692
16 15 955.049 1.21632 0.77086 1.08167 0.79219 0.74979 0.76177 0.37204 1.63777 1.23204 1.16168 0.0015226 0.0015226 0.0015226
17 16 1019.56 1.31248 0.82856 1.05906 0.73266 0.69305 0.72439 0.37582 1.56233 1.24568 1.13402 0.00151228 0.00151228 0.00151228
18 17 1086.82 1.22378 0.82395 1.06851 0.74056 0.66704 0.69789 0.34841 1.61637 1.26108 1.15269 0.00150197 0.00150197 0.00150197
19 18 1146.14 1.19671 0.81487 1.07749 0.75402 0.59642 0.69003 0.35527 1.5438 1.34319 1.1336 0.00149165 0.00149165 0.00149165
20 19 1207.3 1.18703 0.73238 1.05733 0.81832 0.76482 0.79766 0.40821 1.58984 1.16461 1.15089 0.00148134 0.00148134 0.00148134
21 20 1267.32 1.22573 0.73551 1.02884 0.85167 0.75877 0.81816 0.43895 1.55012 1.09675 1.17802 0.00147102 0.00147102 0.00147102
22 21 1340.81 1.25475 0.81837 1.08595 0.8392 0.78796 0.80158 0.42897 1.52718 1.04111 1.1715 0.00146071 0.00146071 0.00146071
23 22 1407.52 1.20925 0.75103 1.05671 0.84815 0.74709 0.79267 0.38087 1.57295 1.10258 1.21634 0.00145039 0.00145039 0.00145039
24 23 1473.3 1.17116 0.71652 1.04478 0.87197 0.74777 0.82292 0.41326 1.56537 1.01333 1.16036 0.00144008 0.00144008 0.00144008
25 24 1536.23 1.13285 0.66772 1.03978 0.87356 0.68617 0.79532 0.45129 1.4998 1.09128 1.14806 0.00142977 0.00142977 0.00142977
26 25 1596.6 1.21552 0.71953 1.05828 0.84945 0.70952 0.79947 0.43768 1.53111 1.13395 1.14834 0.00141945 0.00141945 0.00141945
27 26 1656.97 1.13669 0.66401 1.04418 0.82889 0.73344 0.78144 0.41668 1.59603 1.1384 1.15567 0.00140914 0.00140914 0.00140914
28 27 1721.43 1.16942 0.67131 1.03605 0.83167 0.7159 0.74711 0.4047 1.53652 1.22678 1.136 0.00139882 0.00139882 0.00139882
29 28 1786.57 1.15576 0.65297 1.04957 0.8689 0.70189 0.77759 0.419 1.56037 1.08989 1.16347 0.00138851 0.00138851 0.00138851
30 29 1850.82 1.13333 0.6457 1.01154 0.86735 0.73769 0.80355 0.42021 1.59925 1.01278 1.20663 0.00137819 0.00137819 0.00137819
31 30 1909.09 1.15414 0.65726 1.01882 0.83527 0.73015 0.77426 0.38296 1.64003 1.08129 1.20249 0.00136788 0.00136788 0.00136788
32 31 1965.81 1.11568 0.64661 0.99754 0.84099 0.71629 0.75998 0.37791 1.64049 1.1301 1.19671 0.00135756 0.00135756 0.00135756
33 32 2024.34 1.1059 0.639 1.01337 0.80012 0.81201 0.83321 0.41939 1.60792 1.00363 1.20414 0.00134725 0.00134725 0.00134725
34 33 2087.38 1.08118 0.65677 1.02235 0.81546 0.81039 0.83209 0.4208 1.62292 0.9894 1.2161 0.00133693 0.00133693 0.00133693
35 34 2148.35 1.05526 0.58841 0.97786 0.79394 0.81044 0.82824 0.42564 1.6099 0.97195 1.2228 0.00132662 0.00132662 0.00132662
36 35 2207.34 1.0814 0.62037 1.00916 0.81265 0.79526 0.82306 0.4061 1.67906 1.05719 1.26155 0.0013163 0.0013163 0.0013163
37 36 2266.07 1.03936 0.6256 1.01271 0.85109 0.78313 0.84651 0.4477 1.59411 0.96316 1.21123 0.00130599 0.00130599 0.00130599
38 37 2330.3 1.10196 0.63687 0.99742 0.85998 0.80409 0.86822 0.46085 1.52489 0.87966 1.16047 0.00129568 0.00129568 0.00129568
39 38 2389.43 1.09974 0.62003 0.98314 0.78886 0.84155 0.87775 0.47678 1.46115 0.90059 1.10349 0.00128536 0.00128536 0.00128536
40 39 2442.59 1.0649 0.61785 1.01021 0.84493 0.73686 0.81213 0.4527 1.47702 0.97683 1.10445 0.00127505 0.00127505 0.00127505
41 40 2499.96 1.08902 0.60489 0.9936 0.81723 0.76167 0.79881 0.42306 1.54057 1.03318 1.13928 0.00126473 0.00126473 0.00126473
42 41 2559.36 1.07171 0.61051 1.00153 0.76994 0.79922 0.81643 0.43151 1.49266 0.97571 1.12973 0.00125442 0.00125442 0.00125442
43 42 2613.89 1.02256 0.56022 0.97611 0.8244 0.81279 0.84997 0.4816 1.42513 0.89275 1.09134 0.0012441 0.0012441 0.0012441
44 43 2674.07 1.05683 0.56238 0.99438 0.82951 0.8144 0.8675 0.49035 1.44798 0.95263 1.11568 0.00123379 0.00123379 0.00123379
45 44 2734.98 1.02716 0.56554 0.9727 0.88832 0.80965 0.86946 0.49677 1.44353 0.90131 1.10485 0.00122347 0.00122347 0.00122347
46 45 2804.25 0.9922 0.56205 0.96851 0.90123 0.80454 0.87632 0.51068 1.40745 0.88131 1.09512 0.00121316 0.00121316 0.00121316
47 46 2872.72 1.01907 0.56211 0.95705 0.88324 0.84067 0.87831 0.51432 1.42503 0.8497 1.11045 0.00120284 0.00120284 0.00120284
48 47 2935.88 0.99557 0.56648 0.96885 0.85152 0.81621 0.86948 0.51424 1.40815 0.96053 1.08512 0.00119253 0.00119253 0.00119253
49 48 3002.58 1.02267 0.56571 0.98022 0.89158 0.73889 0.8474 0.48651 1.41888 1.05662 1.10761 0.00118222 0.00118222 0.00118222
50 49 3075.33 1.0152 0.56551 0.97089 0.8842 0.74283 0.84295 0.46968 1.46149 1.07461 1.13234 0.0011719 0.0011719 0.0011719
51 50 3140.21 1.00589 0.56076 0.98049 0.88172 0.73785 0.83619 0.47201 1.44356 1.06744 1.11786 0.00116159 0.00116159 0.00116159
52 51 3203.68 0.94482 0.53004 0.95271 0.82871 0.77199 0.82516 0.4583 1.42868 1.11943 1.10539 0.00115127 0.00115127 0.00115127
53 52 3263.78 0.97737 0.53555 0.95427 0.85761 0.73881 0.80761 0.4613 1.4313 1.17755 1.08101 0.00114096 0.00114096 0.00114096
54 53 3331.97 1.01495 0.56454 0.98778 0.86385 0.73227 0.80137 0.48089 1.38741 1.13637 1.07088 0.00113064 0.00113064 0.00113064
55 54 3413.58 0.94196 0.53715 0.95638 0.90088 0.75414 0.82182 0.48357 1.46466 1.0487 1.12904 0.00112033 0.00112033 0.00112033
56 55 3493.73 1.0123 0.55747 0.96089 0.84736 0.8026 0.81626 0.43752 1.57682 1.11097 1.17613 0.00111001 0.00111001 0.00111001
57 56 3570.75 0.9974 0.55304 0.96129 0.83718 0.79393 0.83064 0.44948 1.53084 1.03905 1.16444 0.0010997 0.0010997 0.0010997
58 57 3665.83 0.98177 0.53568 0.9548 0.83175 0.78525 0.83499 0.45103 1.55878 1.00985 1.17559 0.00108938 0.00108938 0.00108938
59 58 3735.05 0.94241 0.52072 0.93103 0.8808 0.73896 0.82644 0.45575 1.53745 1.02492 1.15056 0.00107907 0.00107907 0.00107907
60 59 3795.92 0.91156 0.51309 0.9365 0.88278 0.77035 0.83347 0.46175 1.54233 1.01675 1.16275 0.00106876 0.00106876 0.00106876
61 60 3860.37 0.92004 0.51161 0.95411 0.86222 0.78873 0.85862 0.47488 1.54815 0.9485 1.16171 0.00105844 0.00105844 0.00105844
62 61 3927.86 0.95472 0.52462 0.95675 0.85129 0.77895 0.85322 0.47763 1.52768 0.9512 1.14642 0.00104813 0.00104813 0.00104813
63 62 3990.79 0.90886 0.49487 0.94372 0.89962 0.73995 0.84626 0.46073 1.62276 1.03266 1.18278 0.00103781 0.00103781 0.00103781
64 63 4049.75 0.95907 0.53303 0.95493 0.89966 0.73131 0.84914 0.47875 1.54124 1.00341 1.17293 0.0010275 0.0010275 0.0010275
65 64 4106.56 0.9478 0.5117 0.96615 0.89467 0.7724 0.86173 0.47643 1.53408 0.9542 1.15634 0.00101718 0.00101718 0.00101718
66 65 4167.55 0.92725 0.49707 0.93224 0.89332 0.77382 0.86775 0.49434 1.50135 0.96686 1.12619 0.00100687 0.00100687 0.00100687
67 66 4222.22 0.8928 0.49489 0.92333 0.88349 0.7791 0.8533 0.5184 1.39522 0.97572 1.08409 0.000996553 0.000996553 0.000996553
68 67 4286.54 0.89278 0.50173 0.9482 0.88114 0.74578 0.82551 0.47459 1.51922 1.08469 1.14589 0.000986239 0.000986239 0.000986239
69 68 4352.18 0.91221 0.48714 0.94274 0.86239 0.77878 0.83523 0.48605 1.47504 1.0137 1.14348 0.000975924 0.000975924 0.000975924
70 69 4416.98 0.92513 0.49839 0.95058 0.86091 0.77408 0.83701 0.4823 1.48431 1.01609 1.14506 0.00096561 0.00096561 0.00096561
71 70 4481.69 0.9265 0.50412 0.95827 0.87352 0.78358 0.85596 0.47859 1.54724 0.96492 1.16844 0.000955295 0.000955295 0.000955295
72 71 4542.47 0.89838 0.47947 0.92774 0.85109 0.77592 0.84825 0.47895 1.52074 1.0106 1.15359 0.000944981 0.000944981 0.000944981
73 72 4603.38 0.87928 0.48419 0.95831 0.84854 0.77573 0.85815 0.49402 1.4566 0.98823 1.11956 0.000934666 0.000934666 0.000934666
74 73 4686.7 0.89509 0.48605 0.92495 0.86615 0.7724 0.86459 0.49602 1.4684 0.96349 1.12419 0.000924352 0.000924352 0.000924352
75 74 4782.55 0.88792 0.47804 0.91287 0.88533 0.76409 0.86409 0.49936 1.45706 0.95254 1.13382 0.000914037 0.000914037 0.000914037
76 75 4872.94 0.87717 0.47324 0.93148 0.88217 0.75832 0.85136 0.49748 1.45607 0.99171 1.11589 0.000903722 0.000903722 0.000903722
77 76 4964.16 0.88961 0.4978 0.95116 0.86426 0.74936 0.84268 0.48786 1.46865 1.02714 1.12557 0.000893408 0.000893408 0.000893408
78 77 5063.38 0.91309 0.49079 0.92397 0.86638 0.76058 0.84389 0.47776 1.49456 1.04264 1.14549 0.000883093 0.000883093 0.000883093
79 78 5149.52 0.89989 0.47623 0.92064 0.87926 0.77507 0.84856 0.49483 1.45886 1.01439 1.13391 0.000872779 0.000872779 0.000872779
80 79 5230.83 0.8793 0.46789 0.91475 0.92054 0.74956 0.85493 0.49965 1.47806 1.02069 1.14405 0.000862464 0.000862464 0.000862464
81 80 5294.29 0.87532 0.47277 0.93447 0.87783 0.7786 0.85332 0.4987 1.48879 1.01274 1.16473 0.00085215 0.00085215 0.00085215
82 81 5372.67 0.89327 0.48524 0.92567 0.8579 0.80376 0.85352 0.50544 1.4667 1.00378 1.14981 0.000841835 0.000841835 0.000841835
83 82 5455.1 0.87699 0.48324 0.92144 0.87107 0.78965 0.85643 0.48865 1.50073 1.00175 1.14528 0.00083152 0.00083152 0.00083152
84 83 5536.28 0.85218 0.47155 0.92067 0.90141 0.76111 0.85754 0.50609 1.43454 0.95541 1.12228 0.000821206 0.000821206 0.000821206
85 84 5606.04 0.84978 0.4512 0.91087 0.89474 0.74689 0.83767 0.4886 1.47975 1.05443 1.13804 0.000810891 0.000810891 0.000810891
86 85 5692.85 0.81845 0.44907 0.89669 0.89146 0.72608 0.81907 0.4773 1.50038 1.12614 1.13774 0.000800577 0.000800577 0.000800577
87 86 5765.9 0.79971 0.44651 0.91734 0.89898 0.71673 0.8074 0.48507 1.45897 1.13989 1.11424 0.000790262 0.000790262 0.000790262
88 87 5818.83 0.82762 0.45254 0.9196 0.89978 0.69257 0.79178 0.47209 1.48032 1.15014 1.12438 0.000779948 0.000779948 0.000779948
89 88 5872.18 0.85257 0.4565 0.9099 0.89074 0.7137 0.80221 0.48212 1.41506 1.05222 1.10373 0.000769633 0.000769633 0.000769633
90 89 5954.08 0.84912 0.4572 0.9087 0.88648 0.7257 0.81562 0.49914 1.36928 0.97158 1.08567 0.000759318 0.000759318 0.000759318
91 90 6027.31 0.85146 0.45215 0.90956 0.88013 0.77079 0.86089 0.51643 1.39218 0.88963 1.09865 0.000749004 0.000749004 0.000749004
92 91 6112.29 0.81797 0.44364 0.90243 0.86222 0.82662 0.88341 0.50837 1.46039 0.85144 1.13782 0.000738689 0.000738689 0.000738689
93 92 6198.37 0.83892 0.44542 0.92215 0.87767 0.81513 0.87715 0.52601 1.39735 0.85518 1.11573 0.000728375 0.000728375 0.000728375
94 93 6295.3 0.86043 0.46378 0.91471 0.85171 0.83189 0.87002 0.52874 1.39665 0.88683 1.11991 0.00071806 0.00071806 0.00071806
95 94 6381.76 0.82842 0.45414 0.9117 0.89507 0.80857 0.85285 0.50811 1.42017 0.9341 1.12234 0.000707746 0.000707746 0.000707746
96 95 6444.66 0.81903 0.43287 0.89898 0.89684 0.79686 0.84173 0.49246 1.4492 0.9732 1.13837 0.000697431 0.000697431 0.000697431
97 96 6502.26 0.84115 0.4502 0.90791 0.89696 0.78214 0.82814 0.49477 1.43476 1.00993 1.13288 0.000687117 0.000687117 0.000687117
98 97 6571.32 0.85867 0.44822 0.89326 0.88704 0.7823 0.82823 0.49829 1.42715 1.01662 1.13027 0.000676802 0.000676802 0.000676802
99 98 6634.82 0.80855 0.44512 0.91555 0.8892 0.78796 0.84685 0.49211 1.46855 0.96526 1.16313 0.000666487 0.000666487 0.000666487
100 99 6689.86 0.82724 0.4381 0.90312 0.87534 0.8083 0.86822 0.51027 1.43357 0.88064 1.15871 0.000656173 0.000656173 0.000656173
101 100 6744.4 0.80057 0.43515 0.89791 0.87713 0.7927 0.8587 0.50578 1.44704 0.93536 1.14457 0.000645858 0.000645858 0.000645858
102 101 6809.13 0.79881 0.42616 0.89512 0.88104 0.77246 0.85438 0.50168 1.46296 0.97746 1.14407 0.000635544 0.000635544 0.000635544
103 102 6868.32 0.80666 0.43615 0.92248 0.87855 0.77536 0.85596 0.49148 1.47554 0.98961 1.14676 0.000625229 0.000625229 0.000625229
104 103 6931.04 0.85606 0.45226 0.89806 0.89684 0.77928 0.86276 0.50759 1.4298 0.92478 1.12425 0.000614915 0.000614915 0.000614915
105 104 6986.06 0.79998 0.43726 0.89334 0.89574 0.78084 0.85245 0.51396 1.41363 0.92485 1.11765 0.0006046 0.0006046 0.0006046
106 105 7048.41 0.79064 0.41766 0.89185 0.87617 0.77795 0.84539 0.51186 1.41352 0.94527 1.12021 0.000594286 0.000594286 0.000594286
107 106 7106.27 0.73175 0.41392 0.89594 0.88759 0.754 0.83939 0.5163 1.39709 0.97677 1.1127 0.000583971 0.000583971 0.000583971
108 107 7158.96 0.79688 0.42984 0.88138 0.89642 0.73065 0.82522 0.51469 1.39299 1.03874 1.10165 0.000573656 0.000573656 0.000573656
109 108 9141.64 0.77176 0.42634 0.90028 0.87741 0.74456 0.83308 0.51626 1.40735 1.03697 1.11141 0.000563342 0.000563342 0.000563342
110 109 9202.9 0.74907 0.40643 0.8906 0.86035 0.76184 0.83868 0.51851 1.41075 1.03832 1.12088 0.000553027 0.000553027 0.000553027
111 110 9256.27 0.7389 0.41463 0.87498 0.85567 0.77224 0.83979 0.51339 1.41225 1.04125 1.12486 0.000542713 0.000542713 0.000542713
112 111 9309.27 0.71814 0.39574 0.88681 0.86482 0.78196 0.83978 0.509 1.4336 1.05185 1.13176 0.000532398 0.000532398 0.000532398
113 112 9365.68 0.75555 0.4005 0.8802 0.86272 0.77609 0.84114 0.51458 1.40812 1.04276 1.12473 0.000522084 0.000522084 0.000522084
114 113 9427.52 0.73819 0.39692 0.87908 0.86019 0.77669 0.84036 0.51588 1.40349 1.0195 1.12516 0.000511769 0.000511769 0.000511769
115 114 9480.57 0.75334 0.40286 0.88 0.87553 0.76213 0.84161 0.50298 1.43416 1.03579 1.1364 0.000501454 0.000501454 0.000501454
116 115 9535.52 0.71741 0.40709 0.88379 0.87534 0.76236 0.83011 0.49302 1.47118 1.0716 1.15247 0.00049114 0.00049114 0.00049114
117 116 9587.07 0.73907 0.40472 0.90054 0.85779 0.77663 0.82938 0.49242 1.46578 1.0339 1.15246 0.000480825 0.000480825 0.000480825
118 117 9646.85 0.72063 0.39483 0.87592 0.86439 0.78181 0.83759 0.50283 1.45191 1.00848 1.14853 0.000470511 0.000470511 0.000470511
119 118 9702.89 0.75835 0.40081 0.89469 0.86394 0.80194 0.84069 0.51123 1.43509 0.97228 1.14162 0.000460196 0.000460196 0.000460196
120 119 11987.1 0.74135 0.40808 0.87484 0.87787 0.77576 0.84053 0.5033 1.4468 0.95905 1.14214 0.000449882 0.000449882 0.000449882
121 120 12043.5 0.73075 0.40209 0.88475 0.87602 0.77261 0.83872 0.50132 1.43458 0.93607 1.13697 0.000439567 0.000439567 0.000439567
122 121 12103.3 0.73694 0.41317 0.88506 0.87835 0.76905 0.84238 0.50442 1.43599 0.93077 1.13804 0.000429253 0.000429253 0.000429253
123 122 12163 0.74751 0.40979 0.88821 0.89008 0.77371 0.85662 0.52003 1.40988 0.92203 1.12526 0.000418938 0.000418938 0.000418938
124 123 12232.9 0.71831 0.38944 0.87757 0.90651 0.76895 0.86124 0.53448 1.38131 0.96026 1.10849 0.000408623 0.000408623 0.000408623
125 124 12327.3 0.73282 0.39492 0.87868 0.90952 0.76854 0.85966 0.52842 1.40381 0.98494 1.12945 0.000398309 0.000398309 0.000398309
126 125 12422.9 0.73621 0.40186 0.89345 0.89322 0.77919 0.854 0.52556 1.40471 0.98762 1.13634 0.000387994 0.000387994 0.000387994
127 126 12501.9 0.66706 0.37401 0.87079 0.8923 0.77817 0.84959 0.52795 1.39196 0.99186 1.13554 0.00037768 0.00037768 0.00037768
128 127 12580.5 0.702 0.38536 0.86504 0.89254 0.77677 0.84727 0.53184 1.37799 1.00403 1.12626 0.000367365 0.000367365 0.000367365
129 128 12656.3 0.71482 0.39346 0.88107 0.8952 0.77471 0.84897 0.51971 1.40017 1.01947 1.12457 0.000357051 0.000357051 0.000357051
130 129 12721.7 0.66264 0.38726 0.86829 0.89192 0.77911 0.85083 0.51729 1.41471 1.0196 1.12969 0.000346736 0.000346736 0.000346736
131 130 12783.9 0.72436 0.38713 0.88422 0.90839 0.77005 0.85353 0.52001 1.42579 1.01278 1.13795 0.000336421 0.000336421 0.000336421
132 131 12850.3 0.70487 0.38277 0.87381 0.91595 0.76888 0.85535 0.51653 1.44274 0.9948 1.14897 0.000326107 0.000326107 0.000326107
133 132 12917.6 0.69815 0.38489 0.87641 0.92035 0.77284 0.85644 0.51712 1.44863 1.00093 1.15526 0.000315792 0.000315792 0.000315792
134 133 12993.4 0.70362 0.38084 0.88123 0.9212 0.77433 0.86192 0.51986 1.44352 0.98016 1.15681 0.000305478 0.000305478 0.000305478
135 134 13059.6 0.66337 0.36126 0.86619 0.91509 0.77895 0.86423 0.52054 1.42391 0.95888 1.15263 0.000295163 0.000295163 0.000295163
136 135 13121.3 0.706 0.38323 0.88332 0.90915 0.77895 0.86703 0.51757 1.42849 0.96224 1.15048 0.000284849 0.000284849 0.000284849
137 136 13187.1 0.71043 0.38211 0.88005 0.88339 0.78911 0.8676 0.51902 1.43426 0.98051 1.14425 0.000274534 0.000274534 0.000274534
138 137 13253.2 0.69473 0.37104 0.85851 0.90254 0.77186 0.86565 0.52428 1.42088 0.97809 1.13567 0.00026422 0.00026422 0.00026422
139 138 13318.1 0.67577 0.36656 0.86718 0.91877 0.76184 0.86163 0.52486 1.41129 0.95833 1.13302 0.000253905 0.000253905 0.000253905
140 139 13385.7 0.67721 0.37273 0.85745 0.9168 0.76533 0.86296 0.52289 1.40551 0.95632 1.1371 0.00024359 0.00024359 0.00024359
141 140 13446.9 0.6517 0.35944 0.8508 0.93201 0.75762 0.86115 0.51662 1.41534 0.96643 1.14789 0.000233276 0.000233276 0.000233276
142 141 13517.6 0.64047 0.36936 0.87333 0.93111 0.75716 0.85652 0.51348 1.4202 0.97294 1.15299 0.000222961 0.000222961 0.000222961
143 142 13588.4 0.69888 0.36964 0.85824 0.93221 0.75033 0.8491 0.51534 1.41669 0.98704 1.15152 0.000212647 0.000212647 0.000212647
144 143 13643.9 0.71185 0.38358 0.87189 0.9116 0.76291 0.84427 0.51323 1.4192 1.01136 1.14921 0.000202332 0.000202332 0.000202332
145 144 13719.1 0.64623 0.37055 0.86985 0.91056 0.75913 0.84392 0.51516 1.41387 1.02121 1.15224 0.000192018 0.000192018 0.000192018
146 145 13784.5 0.66081 0.36438 0.86632 0.9132 0.75848 0.84315 0.51483 1.41336 1.03125 1.1529 0.000181703 0.000181703 0.000181703
147 146 13848.7 0.65745 0.36182 0.86139 0.90329 0.76888 0.84926 0.51381 1.42007 1.03542 1.15488 0.000171388 0.000171388 0.000171388
148 147 13908.1 0.63479 0.3514 0.86504 0.90576 0.77036 0.85147 0.5178 1.42078 1.03178 1.15807 0.000161074 0.000161074 0.000161074
149 148 13968.4 0.63422 0.35394 0.85725 0.92578 0.75862 0.847 0.51962 1.40845 1.0179 1.15255 0.000150759 0.000150759 0.000150759
150 149 14035.5 0.63601 0.3558 0.86482 0.92678 0.75973 0.84713 0.52163 1.40363 1.01592 1.14974 0.000140445 0.000140445 0.000140445
151 150 14095.4 0.64997 0.3542 0.86655 0.9277 0.76004 0.84939 0.52168 1.40087 1.01682 1.14528 0.00013013 0.00013013 0.00013013
152 151 14167.3 0.6073 0.33399 0.83538 0.9194 0.75667 0.85041 0.52062 1.40043 1.00815 1.14091 0.000119816 0.000119816 0.000119816
153 152 14226.8 0.60694 0.32863 0.85148 0.92139 0.75641 0.85336 0.51838 1.39753 0.98436 1.13874 0.000109501 0.000109501 0.000109501
154 153 14292.6 0.63423 0.33211 0.84596 0.90534 0.7674 0.85652 0.51828 1.40057 0.97746 1.14122 9.91865e-05 9.91865e-05 9.91865e-05
155 154 14359.1 0.60499 0.3303 0.84005 0.91644 0.75894 0.85333 0.51454 1.40884 0.9768 1.14537 8.88719e-05 8.88719e-05 8.88719e-05
156 155 14413.1 0.60577 0.32443 0.85879 0.91596 0.75152 0.8492 0.51537 1.41607 0.98924 1.14939 7.85574e-05 7.85574e-05 7.85574e-05
157 156 14473.2 0.58913 0.31256 0.84404 0.91876 0.74804 0.8443 0.51521 1.41711 1.00052 1.1496 6.82428e-05 6.82428e-05 6.82428e-05
158 157 14542.2 0.5716 0.31241 0.8388 0.91502 0.74473 0.84185 0.51392 1.41308 1.00065 1.14791 5.79283e-05 5.79283e-05 5.79283e-05
159 158 14606.5 0.60144 0.32608 0.84324 0.9115 0.74515 0.83827 0.51145 1.41112 1.01063 1.14756 4.76137e-05 4.76137e-05 4.76137e-05
160 159 14661.6 0.58397 0.30936 0.84704 0.90965 0.74982 0.8377 0.51232 1.41159 1.02043 1.14842 3.72991e-05 3.72991e-05 3.72991e-05
161 160 14722.2 0.57349 0.31213 0.8455 0.89784 0.75784 0.83713 0.51123 1.41148 1.02603 1.14819 2.69846e-05 2.69846e-05 2.69846e-05

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

Binary file not shown.

5
src/setupTests.js Normal file
View File

@ -0,0 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';