opencv_createsamples
и opencv_traincascade
, а также необходимые им DLL-библиотеки. Распакуйте их в рабочий каталог в корне диска, без русских букв и пробелов в названии. Здесь и далее предполагается, что C:\MyDirName
- ваш рабочий каталог.negatives
.dir C:\MyDirName\negatives\*.jpg /B /S >C:\MyDirName\negatives\negatives_abs.txt
dir C:\MyDirName\negatives\*.jpg /B >C:\MyDirName\negatives\negatives_rel.txt
C:\MyDirName\positives
и C:\MyDirName\training
. Поместите ваше изображение - положительный пример в каталог C:\MyDirName\
и назовите его positive.jpg
. В качестве положительного примера желательно разместить ваш объект на светлом фоне, если он тёмный, и наоборот.opencv_createsamples
. Команда будет выглядеть примерно следующим образом:C:\MyDirName\opencv_createsamples.exe -info positives\info.lst -img positive.jpg -bg negatives\negatives_rel.txt -maxxangle 0.1 -maxyangle 0.1 -maxzangle 0.1 -bgcolor 0 -bgthresh 0 -w 50 -h 50 -num 100
C:\MyDirName\opencv_createsamples.exe -info positives\info.lst -num 100 -w 20 -h 20 -vec positives\positives.vec
C:\MyDirName\opencv_traincascade.exe -data training -vec positives\positives.vec -bg negatives\negatives_abs.txt -numStages 100 -numPos 100 -numNeg 100 -featureType haar -w 20 -h 20 -minHitRate 0.999 -maxFalseAlarmRate 0.4 -precalcValBufSize 4048 -precalcIdxBufSize 4048 -numThreads 24 -acceptanceRatioBreakValue 10e-5
document.querySelector('.close').addEventListener('click', function(e){
e.stopPropagation()
document.querySelector('.result').insertAdjacentHTML('beforeend', '<div>Close</div>');
});
value = 1000 + 135 * (15000 - 1000) / 180 = 11500
aspect-ratio
хорошо конечно, но поддержка пока не очень.<div class="out">
<div class="in">
<img src="test_img.png" alt="">
</div>
</div>
.out {
position: relative;
width: 200px;
height: 100px;
background: #000;
}
.in {
position: absolute;
top: 0;
bottom: 0;
height: 100%;
right: 10%;
background: red;
}
.in img {
display: block;
height: 100%;
width: auto;
}
relative
внешний блок вкладываем absolute
вложенный, растягиваем его по высоте, и как-то его по ширине позиционируем (я использовал right: 10%;
. Ширину не указываем - ее сформирует img
, который блочный и тоже растянут по высоте (смасштабирован к текущему блоку)..in:before { content: url("test_img.png"); }
но это не работает - картинка грузится, но не масштабируется как надо. if call.data == 'apple' or 'melon': #Вот в этом месте проблема
if call.data in ('apple', 'melon'):
if call.data == 'apple' or call.data == 'melon':
if (call.data == 'apple') or ('melon' != ''):
if (call.data == 'apple') or True:
if True:
Мое решение:
let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = {};
for (let i = 0; i <= arr.length; i++) {
obj[i + 1] += arr;
}
console.log(obj);
+=
? Вы же не плюсуете к чему то, а назначаете значение. То есть - obj[i + 1] += arr;
+ obj[i + 1] = arr;
- obj[i + 1] = arr;
+ obj[i + 1] = arr[i];
let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = {};
for (let i = 1; i <= arr.length; i++) {
obj[i] = arr[i-1];
}
console.log(obj);
let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = arr.reduce((a, c, i) => (a[i+1] = c, a), {});
console.log(obj);
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Document</title>
<style>
.cards {
width: 60%;
border: 2px solid red;
margin: 10px auto;
display: flex;
justify-content: space-between;
padding: 0 45px;
}
.card {
flex-shrink: 0;
position: relative;
width: 0;
height: 126px;
transition: 0.3s;
cursor: pointer;
}
.card:before {
content: "";
box-sizing: border-box;
position: absolute;
top: 0;
left: -45px;
width: 90px;
height: 100%;
background-color: blue;
border-style: inset;
border-radius: 10px;
}
.card:hover{
transform: translate(0, -20px);
}
</style>
</head>
<body>
<div class="cards">
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
</div>
<div class="cards">
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
</div>
</body>
</html>
// массив 1..99
const range = Array(99)
.fill()
.map((_, i) => i + 1); // массив 1..99
// 6 неповторяющихся выигрышных
const win = Array(6)
.fill()
.map(() => range.splice(Math.floor(Math.random() * range.length), 1).pop())
.sort((a, b) => a - b);
// [ 1, 55, 69, 76, 91, 92 ]
Для выбора выпавших чисел игрока этот же range
уже использовать нельзя – в нём не хватает 6 чисел.