Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Peter, DEMBEL  
Форум NeoBook » Всё о программе NeoBook » Проекты NeoBook » Пример обработки теста (Обработка тестов на бумажном бланке)
Пример обработки теста
markДата: Вт, 24 Ноября 2015, 17:09 | Сообщение # 1
Любопытный
Привожу небольшой пример обработки теста. Задание студентам даётся в бумажном варианте (вопросы и формы для ответа). Ответы сканируются и обрабатываются. Можно ли, как то ускорить обработку теста, если к примеру будет большой объём ответов или ещё другой информации (циклом медленно)? PHP- быстрее, но в нём я не силён.

Плагин: hpwImage_RUS
Прикрепления: Test.rar (42.4 Kb)
 
СообщениеПривожу небольшой пример обработки теста. Задание студентам даётся в бумажном варианте (вопросы и формы для ответа). Ответы сканируются и обрабатываются. Можно ли, как то ускорить обработку теста, если к примеру будет большой объём ответов или ещё другой информации (циклом медленно)? PHP- быстрее, но в нём я не силён.

Плагин: hpwImage_RUS

Автор - mark
Дата добавления - 24 Ноября 2015 в 17:09
PeterДата: Вт, 24 Ноября 2015, 19:54 | Сообщение # 2
Админ NeoBook
Цитата mark ()
Можно ли, как то ускорить обработку теста, если к примеру будет большой объём ответов или ещё другой информации (циклом медленно)?

Необушный цикл не блещет скоростью при большом количестве итераций (и чем длиннее цикл, тем скорость работы цикла ниже), но, как минимум до 100, справляется по скорости вполне исправно.
Большой объем это сколько?
Можно попробовать разбить длинный цикл на несколько более мелких.
Так же надо учитывать то обстоятельство, что необушные переменные тоже обновляются тем медленнее, чем "обЪемнее" их содержимое., например, при добавлении значений в переменную.
Цитата mark ()
ещё другой информации

Организация цикла (и его скорость) будет зависеть от характера этой "другой информации".

К сожалению, на обработке больших объемах информации NeoBook начинает тупить, и единственным эффективным выходом будет применение специализированного (под конкретную задачу) плагина.
Не думаю, что на других скриптовых языках получится получить судьбоносный прирост скорости.
Ну, может быть если на очень длинных циклах.


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата mark ()
Можно ли, как то ускорить обработку теста, если к примеру будет большой объём ответов или ещё другой информации (циклом медленно)?

Необушный цикл не блещет скоростью при большом количестве итераций (и чем длиннее цикл, тем скорость работы цикла ниже), но, как минимум до 100, справляется по скорости вполне исправно.
Большой объем это сколько?
Можно попробовать разбить длинный цикл на несколько более мелких.
Так же надо учитывать то обстоятельство, что необушные переменные тоже обновляются тем медленнее, чем "обЪемнее" их содержимое., например, при добавлении значений в переменную.
Цитата mark ()
ещё другой информации

Организация цикла (и его скорость) будет зависеть от характера этой "другой информации".

К сожалению, на обработке больших объемах информации NeoBook начинает тупить, и единственным эффективным выходом будет применение специализированного (под конкретную задачу) плагина.
Не думаю, что на других скриптовых языках получится получить судьбоносный прирост скорости.
Ну, может быть если на очень длинных циклах.

Автор - Peter
Дата добавления - 24 Ноября 2015 в 19:54
markДата: Ср, 25 Ноября 2015, 06:53 | Сообщение # 3
Любопытный
Цитата Peter ()
выходом будет применение специализированного (под конкретную задачу) плагина.

А, есть ли такой плагин?

Добавлено (25 Ноября 2015, 06:53)
---------------------------------------------
И ещё, если будет дано 2 и более ответа на один вопрос, как можно решить эту проблему с минимум кода, ведь если будет 2 и более ответа программа считает последний закрашенный ответ? %) По условию 2 и более ответа не засчитывается.

 
Сообщение
Цитата Peter ()
выходом будет применение специализированного (под конкретную задачу) плагина.

А, есть ли такой плагин?

Добавлено (25 Ноября 2015, 06:53)
---------------------------------------------
И ещё, если будет дано 2 и более ответа на один вопрос, как можно решить эту проблему с минимум кода, ведь если будет 2 и более ответа программа считает последний закрашенный ответ? %) По условию 2 и более ответа не засчитывается.


Автор - mark
Дата добавления - 25 Ноября 2015 в 06:53
mishemДата: Ср, 25 Ноября 2015, 15:42 | Сообщение # 4
Эксперт форума
Цитата mark ()
Задание студентам даётся в бумажном варианте

А сделать это в электронном варианте составляет какие то проблемы? Или это обязательное условие, в бумажном варианте?

Цитата mark ()
(циклом медленно)

Циклом не так уж и медленно как это кажется. Отключите отладчик, или скомпилируйте проект, и вы увидите что цикл работает в данном случае быстро.

Цитата mark ()
ведь если будет 2 и более ответа программа считает последний закрашенный ответ?

Проверять результаты по горизонтали, а не по вертикали. Не выходить из цикла если найден результат. Если в одной строке больше одного результата, прекратить дальнейшую обработку.
В данном случае все это будет быстро обрабатываться.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата mark ()
Задание студентам даётся в бумажном варианте

А сделать это в электронном варианте составляет какие то проблемы? Или это обязательное условие, в бумажном варианте?

Цитата mark ()
(циклом медленно)

Циклом не так уж и медленно как это кажется. Отключите отладчик, или скомпилируйте проект, и вы увидите что цикл работает в данном случае быстро.

Цитата mark ()
ведь если будет 2 и более ответа программа считает последний закрашенный ответ?

Проверять результаты по горизонтали, а не по вертикали. Не выходить из цикла если найден результат. Если в одной строке больше одного результата, прекратить дальнейшую обработку.
В данном случае все это будет быстро обрабатываться.

Автор - mishem
Дата добавления - 25 Ноября 2015 в 15:42
markДата: Ср, 25 Ноября 2015, 16:48 | Сообщение # 5
Любопытный
Цитата mishem ()
А сделать это в электронном варианте составляет какие то проблемы? Или это обязательное условие, в бумажном варианте?

Это обязательное условие.
Цитата mishem ()
Проверять результаты по горизонтали, а не по вертикали.

Ну у меня по горизонтали и проверяет

Код
Loop "1" "5" "[X]"
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
If "[Pos]" "=" "0,0,0"
SubStr "[Otv]" "[X]" "1" "[Cods]"
StrIns "[Cods]" "[pred]" "[Y]" "[pred]"

Здесь и далее какой-то код

ExitLoop
EndIf
EndLoop

Внутри этого кода по моему нужно что-то добавить, но что не могу сообразить.
 
Сообщение
Цитата mishem ()
А сделать это в электронном варианте составляет какие то проблемы? Или это обязательное условие, в бумажном варианте?

Это обязательное условие.
Цитата mishem ()
Проверять результаты по горизонтали, а не по вертикали.

Ну у меня по горизонтали и проверяет

Код
Loop "1" "5" "[X]"
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
If "[Pos]" "=" "0,0,0"
SubStr "[Otv]" "[X]" "1" "[Cods]"
StrIns "[Cods]" "[pred]" "[Y]" "[pred]"

Здесь и далее какой-то код

ExitLoop
EndIf
EndLoop

Внутри этого кода по моему нужно что-то добавить, но что не могу сообразить.

Автор - mark
Дата добавления - 25 Ноября 2015 в 16:48
PeterДата: Ср, 25 Ноября 2015, 17:57 | Сообщение # 6
Админ NeoBook
Цитата mark ()
Здесь и далее какой-то код

mark, вам уже ответили - нужно просто НЕ выходить из цикла сразу, если найдена черная метка, а проверить строчку до конца, и если черный круг встречается более одного раза в строке, тогда - ошибка, все просто.

Цитата mishem ()
Циклом не так уж и медленно как это кажется. Отключите отладчик, или скомпилируйте проект, и вы увидите что цикл работает в данном случае быстро.

Верно.

Цитата mark ()
Внутри этого кода по моему нужно что-то добавить, но что не могу сообразить.

Что-то в таком духе:
Код
SetVar "n" "0"

Loop "1" "5" "[X]"
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
If "[Pos]" "=" "0,0,0"

SetVar "[n]" "[n]+1"
If "[n]" ">" "1"
  Сообщение об ошибке
  Общий выход
Else
  SubStr "[Otv]" "[X]" "1" "[Cods]"
  StrIns "[Cods]" "[pred]" "[Y]" "[pred]"
EndIf

EndLoop


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата mark ()
Здесь и далее какой-то код

mark, вам уже ответили - нужно просто НЕ выходить из цикла сразу, если найдена черная метка, а проверить строчку до конца, и если черный круг встречается более одного раза в строке, тогда - ошибка, все просто.

Цитата mishem ()
Циклом не так уж и медленно как это кажется. Отключите отладчик, или скомпилируйте проект, и вы увидите что цикл работает в данном случае быстро.

Верно.

Цитата mark ()
Внутри этого кода по моему нужно что-то добавить, но что не могу сообразить.

Что-то в таком духе:
Код
SetVar "n" "0"

Loop "1" "5" "[X]"
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
If "[Pos]" "=" "0,0,0"

SetVar "[n]" "[n]+1"
If "[n]" ">" "1"
  Сообщение об ошибке
  Общий выход
Else
  SubStr "[Otv]" "[X]" "1" "[Cods]"
  StrIns "[Cods]" "[pred]" "[Y]" "[pred]"
EndIf

EndLoop

Автор - Peter
Дата добавления - 25 Ноября 2015 в 17:57
mishemДата: Ср, 25 Ноября 2015, 19:20 | Сообщение # 7
Эксперт форума
Цитата Peter ()
тестируемый не очень аккуратно (плотно) закрасит круг...

Цитата Peter ()
Могут быть и дефекты сканирования или пылинка....

Совершенно верно. Могу еще добавить что сканирование может произойти в серых тонах. То есть может быть не черный цвет, а допустим 0,0,1 или1,0,1 и т.д.
И вообще, подводных камней может быть очень много.

Есть еще плагин hpwDCR, преобразование изображения в текст.

Цитата mark ()
Это обязательное условие.

Не понимаю я этих стереотипов, век электроники, а все бумагой пользуемся. :)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата Peter ()
тестируемый не очень аккуратно (плотно) закрасит круг...

Цитата Peter ()
Могут быть и дефекты сканирования или пылинка....

Совершенно верно. Могу еще добавить что сканирование может произойти в серых тонах. То есть может быть не черный цвет, а допустим 0,0,1 или1,0,1 и т.д.
И вообще, подводных камней может быть очень много.

Есть еще плагин hpwDCR, преобразование изображения в текст.

Цитата mark ()
Это обязательное условие.

Не понимаю я этих стереотипов, век электроники, а все бумагой пользуемся. :)

Автор - mishem
Дата добавления - 25 Ноября 2015 в 19:20
antonДата: Чт, 26 Ноября 2015, 08:47 | Сообщение # 8
Ветеран форума
Цитата mark ()
Это обязательное условие.

Цитата mishem ()
Не понимаю я этих стереотипов, век электроники, а все бумагой пользуемся.

Просто в институте или школе не работал, не всегда есть возможность всех усадить на компы, особенно если поток студентов большой или кабинет с компами вечно кем то занят...

Цитата mishem ()
Совершенно верно. Могу еще добавить что сканирование может произойти в серых тонах. То есть может быть не черный цвет, а допустим 0,0,1 или1,0,1 и т.д.
И вообще, подводных камней может быть очень много.

Да подводных камней тут много, ведь еще и отсканировать можно так что, все элементы на изображение слегка сдвинутся и ты попиксельно будешь получать цвет не с нужного места.

Цитата Peter ()
К сожалению, на обработке больших объемах информации NeoBook начинает тупить, и единственным эффективным выходом будет применение специализированного (под конкретную задачу) плагина.

Ну это не беда, лично я на замену неубушного цикла использую аналог js функции.

Цитата mishem ()
Есть еще плагин hpwDCR, преобразование изображения в текст.

Я бы присмотрелся именно к этому плагину, с помощью него можно сначала получить данный по изображению без ответов, а и уже потом сравнивать с ним данные получаемые с изображения с ответами.


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
 
Сообщение
Цитата mark ()
Это обязательное условие.

Цитата mishem ()
Не понимаю я этих стереотипов, век электроники, а все бумагой пользуемся.

Просто в институте или школе не работал, не всегда есть возможность всех усадить на компы, особенно если поток студентов большой или кабинет с компами вечно кем то занят...

Цитата mishem ()
Совершенно верно. Могу еще добавить что сканирование может произойти в серых тонах. То есть может быть не черный цвет, а допустим 0,0,1 или1,0,1 и т.д.
И вообще, подводных камней может быть очень много.

Да подводных камней тут много, ведь еще и отсканировать можно так что, все элементы на изображение слегка сдвинутся и ты попиксельно будешь получать цвет не с нужного места.

Цитата Peter ()
К сожалению, на обработке больших объемах информации NeoBook начинает тупить, и единственным эффективным выходом будет применение специализированного (под конкретную задачу) плагина.

Ну это не беда, лично я на замену неубушного цикла использую аналог js функции.

Цитата mishem ()
Есть еще плагин hpwDCR, преобразование изображения в текст.

Я бы присмотрелся именно к этому плагину, с помощью него можно сначала получить данный по изображению без ответов, а и уже потом сравнивать с ним данные получаемые с изображения с ответами.

Автор - anton
Дата добавления - 26 Ноября 2015 в 08:47
markДата: Чт, 26 Ноября 2015, 17:45 | Сообщение # 9
Любопытный
Цитата anton ()
Просто в институте или школе не работал, не всегда есть возможность всех усадить на компы, особенно если поток студентов большой или кабинет с компами вечно кем то занят...

Всё правильно, в этом причина.
Цитата anton ()
Да подводных камней тут много, ведь еще и отсканировать можно так что, все элементы на изображение слегка сдвинутся и ты попиксельно будешь получать цвет не с нужного места.

В данном случае
1) настраивается как надо сканер (цвет, разрешение и т.д.)
2) Шаблоны бланков ответов идентичны (преподаватель их сам готовит) ну и соответственно сам их сканирует как надо (в случае сдвига есть идея вычислять разницу пикселей сверху, слева от образца (данные координат в программе) ну и произвести коррекцию. Это ведь только пример моего проекта. В самом проекте предусмотрена запись данных в базу, обработка ответов, вывод на печать результатов, ну и там у меня много вопросов, но вот Антон меня заинтриговал.
Цитата anton ()
Ну это не беда, лично я на замену неубушного цикла использую аналог js функции.

anton, а можно аналог в студию, очень интересно посмотреть, если не трудно на примере моего примера (извиняюсь за тавтологию). В самом начале я об этом и просил (об увеличении скорости обработки)

Добавлено (26 Ноября 2015, 11:11)
---------------------------------------------

Цитата mark ()
Я бы присмотрелся именно к этому плагину, с помощью него можно сначала получить данный по изображению без ответов, а и уже потом сравнивать с ним данные получаемые с изображения с ответами.

Стыдно просить но, если бы живой пример mda

Добавлено (26 Ноября 2015, 17:45)
---------------------------------------------
плагин hpwDCR
демку ковырял и ничего не понял.Перевёл гуглом, а дальше непонятки :(
Список действий:

hpwDcrCreate = Создать DCR-окно.
hpwDcrRemove = Удалить DCR-окно и базу знаний.
hpwDcrLoadKnowledgebase = Загрузите базу знаний с параметрами в DCR-окна.
hpwDcrLoadPicture = Загрузите изображение в DCR-окна.
hpwDcrRecognize = Rocognize текст в загруженном изображении и сохранить в переменную.

 
Сообщение
Цитата anton ()
Просто в институте или школе не работал, не всегда есть возможность всех усадить на компы, особенно если поток студентов большой или кабинет с компами вечно кем то занят...

Всё правильно, в этом причина.
Цитата anton ()
Да подводных камней тут много, ведь еще и отсканировать можно так что, все элементы на изображение слегка сдвинутся и ты попиксельно будешь получать цвет не с нужного места.

В данном случае
1) настраивается как надо сканер (цвет, разрешение и т.д.)
2) Шаблоны бланков ответов идентичны (преподаватель их сам готовит) ну и соответственно сам их сканирует как надо (в случае сдвига есть идея вычислять разницу пикселей сверху, слева от образца (данные координат в программе) ну и произвести коррекцию. Это ведь только пример моего проекта. В самом проекте предусмотрена запись данных в базу, обработка ответов, вывод на печать результатов, ну и там у меня много вопросов, но вот Антон меня заинтриговал.
Цитата anton ()
Ну это не беда, лично я на замену неубушного цикла использую аналог js функции.

anton, а можно аналог в студию, очень интересно посмотреть, если не трудно на примере моего примера (извиняюсь за тавтологию). В самом начале я об этом и просил (об увеличении скорости обработки)

Добавлено (26 Ноября 2015, 11:11)
---------------------------------------------

Цитата mark ()
Я бы присмотрелся именно к этому плагину, с помощью него можно сначала получить данный по изображению без ответов, а и уже потом сравнивать с ним данные получаемые с изображения с ответами.

Стыдно просить но, если бы живой пример mda

Добавлено (26 Ноября 2015, 17:45)
---------------------------------------------
плагин hpwDCR
демку ковырял и ничего не понял.Перевёл гуглом, а дальше непонятки :(
Список действий:

hpwDcrCreate = Создать DCR-окно.
hpwDcrRemove = Удалить DCR-окно и базу знаний.
hpwDcrLoadKnowledgebase = Загрузите базу знаний с параметрами в DCR-окна.
hpwDcrLoadPicture = Загрузите изображение в DCR-окна.
hpwDcrRecognize = Rocognize текст в загруженном изображении и сохранить в переменную.


Автор - mark
Дата добавления - 26 Ноября 2015 в 17:45
PeterДата: Чт, 26 Ноября 2015, 19:56 | Сообщение # 10
Админ NeoBook
Цитата mark ()
плагин hpwDCR

mark, этот плагин служит для распознавания текстов, и скорости не добавит (скорее всего прямо наоборот и весьма существенно).
Да и JS в данном случае скорости тоже не добавит.


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата mark ()
плагин hpwDCR

mark, этот плагин служит для распознавания текстов, и скорости не добавит (скорее всего прямо наоборот и весьма существенно).
Да и JS в данном случае скорости тоже не добавит.

Автор - Peter
Дата добавления - 26 Ноября 2015 в 19:56
mishemДата: Чт, 26 Ноября 2015, 20:02 | Сообщение # 11
Эксперт форума
Цитата mark ()
демку ковырял и ничего не понял.Перевёл гуглом, а дальше непонятки

Ну... Здесь со всеми плагинами так. :) Кто то разбирается, а после объясняет другим.

По сути плагин нужно сначала обучить распознавать текст. Для этого с ним идет программа DCR.exe
Запускаем ее и начинаем обучать. Вот здесь и нужно разбираться, как все это сделать.

Когда обучили, сохраняем файл *.dcr и после подсовываем его плагину. По идее плагин должен распознать текст.

Лично я с настройками не смог разобраться, что-за что отвечает. :(

Ниже перевод плагина и файл не полного перевода для DCR.exe (кладем DCR.RUS рядом с DCR.exe)

Когда разберетесь, надеюсь поделитесь с нами. :)
Прикрепления: DCR.zip (616.2 Kb)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата mark ()
демку ковырял и ничего не понял.Перевёл гуглом, а дальше непонятки

Ну... Здесь со всеми плагинами так. :) Кто то разбирается, а после объясняет другим.

По сути плагин нужно сначала обучить распознавать текст. Для этого с ним идет программа DCR.exe
Запускаем ее и начинаем обучать. Вот здесь и нужно разбираться, как все это сделать.

Когда обучили, сохраняем файл *.dcr и после подсовываем его плагину. По идее плагин должен распознать текст.

Лично я с настройками не смог разобраться, что-за что отвечает. :(

Ниже перевод плагина и файл не полного перевода для DCR.exe (кладем DCR.RUS рядом с DCR.exe)

Когда разберетесь, надеюсь поделитесь с нами. :)

Автор - mishem
Дата добавления - 26 Ноября 2015 в 20:02
antonДата: Чт, 26 Ноября 2015, 20:30 | Сообщение # 12
Ветеран форума
Сегодня много работы, функцию и если разберусь с плагином hpwDCR постараюсь выложить завтра...

"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
 
СообщениеСегодня много работы, функцию и если разберусь с плагином hpwDCR постараюсь выложить завтра...

Автор - anton
Дата добавления - 26 Ноября 2015 в 20:30
markДата: Чт, 26 Ноября 2015, 20:35 | Сообщение # 13
Любопытный
Только для одного ответа, примерно нужно обработать 1000 с лишним точек на изображении (кроме ответов есть другая информация-фамилия студента, вариант и т.д.), а ещё обработка ответа, поэтому вопрос скорости и возник.
Цитата Peter ()
mark, этот плагин служит для распознавания текстов, и скорости не добавит (скорее всего прямо наоборот и весьма существенно).
Да и JS в данном случае скорости тоже не добавит, если его вообще можно хоть как-то прикрутить к поставленной задаче.

А раз это так буду делать по своему варианту (изображение обрамлю рамкой, отступив немного от края листа,после сканирования вычислю разницу относительно верха, слева, буду манипулировать этой разницей, а для точности проверю две точки (на небольшом расстоянии-2-5 пикселей) на одном участке и если хоть один черный считаем закрашено, долго, но что делать, раз нет вариантов или других идей. sorry
 
СообщениеТолько для одного ответа, примерно нужно обработать 1000 с лишним точек на изображении (кроме ответов есть другая информация-фамилия студента, вариант и т.д.), а ещё обработка ответа, поэтому вопрос скорости и возник.
Цитата Peter ()
mark, этот плагин служит для распознавания текстов, и скорости не добавит (скорее всего прямо наоборот и весьма существенно).
Да и JS в данном случае скорости тоже не добавит, если его вообще можно хоть как-то прикрутить к поставленной задаче.

А раз это так буду делать по своему варианту (изображение обрамлю рамкой, отступив немного от края листа,после сканирования вычислю разницу относительно верха, слева, буду манипулировать этой разницей, а для точности проверю две точки (на небольшом расстоянии-2-5 пикселей) на одном участке и если хоть один черный считаем закрашено, долго, но что делать, раз нет вариантов или других идей. sorry

Автор - mark
Дата добавления - 26 Ноября 2015 в 20:35
PeterДата: Чт, 26 Ноября 2015, 20:49 | Сообщение # 14
Админ NeoBook
Цитата mark ()
долго, но что делать,

Цикл из 10 повторений плюс вложенный цикл из 5 повторений для NeoBook - ерунда.
Не думаю, что решение через JS (nbExecAction) даст прирост скорости, т.к. тормозить будет не сам цикл (он короткий), а то, что внутри цикла.
Но, интересно будет посмотреть, с учетом того, что уже как-то был прецедент, когда необушный скрипт работал быстрее VBS.

Необушный язык это тот же самый скриптовый язык, как и все остальные, разница только в синтаксисе, организации интерпретатора, и наборе готовых "к употреблению" функций.
Реально эффективное решение (по скорости) - специальный плагин, которому только указывается картинка, а затем после нажатия кнопки - результат (примерно как с поиском файлов).
Впрочем, посмотрим что нам скажет тов. JS.


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата mark ()
долго, но что делать,

Цикл из 10 повторений плюс вложенный цикл из 5 повторений для NeoBook - ерунда.
Не думаю, что решение через JS (nbExecAction) даст прирост скорости, т.к. тормозить будет не сам цикл (он короткий), а то, что внутри цикла.
Но, интересно будет посмотреть, с учетом того, что уже как-то был прецедент, когда необушный скрипт работал быстрее VBS.

Необушный язык это тот же самый скриптовый язык, как и все остальные, разница только в синтаксисе, организации интерпретатора, и наборе готовых "к употреблению" функций.
Реально эффективное решение (по скорости) - специальный плагин, которому только указывается картинка, а затем после нажатия кнопки - результат (примерно как с поиском файлов).
Впрочем, посмотрим что нам скажет тов. JS.

Автор - Peter
Дата добавления - 26 Ноября 2015 в 20:49
СергейДата: Пт, 27 Ноября 2015, 12:15 | Сообщение # 15
Необукер
mark Может пойти другим путем...
Не знаю, может идея и дебильная, но опишу, может не вся, а хоть какая то часть пригодится.
Я бы попробовал сделать так, создать шаблоны - один пустой, а другие с правильными вариантами ответов.
Пропустил бы от сканированные ответы через плагин, для того чтоб получить некий "отпечаток"/шаблон
Надо что то типа сравнение или поиск или сохранить (при наличии) Mime/Stream, может есть Base64, MD5 и т.д.
Естественно при сканировании сделать отступ сверху, где написаны тех данные (ФИО вариант и т.д.), т.е. только рабочую область ответов.
А потом бы уже ответы учеников сравнивал с уже готовыми шаблонами-отпечатками.
Надеюсь мысль хоть немного понятна)
------------------------------------------------------------
Конечно будет погрешность, но при сравнении просто учитывать эту погрешность.
Это про круги которые будут не полностью закрашены.
Тут надо проверять методом тыка.
------------------------------------------------------------
да уж, идея тупая :D


Сообщение отредактировано
Сергей - Пт, 27 Ноября 2015, 12:22
 
Сообщениеmark Может пойти другим путем...
Не знаю, может идея и дебильная, но опишу, может не вся, а хоть какая то часть пригодится.
Я бы попробовал сделать так, создать шаблоны - один пустой, а другие с правильными вариантами ответов.
Пропустил бы от сканированные ответы через плагин, для того чтоб получить некий "отпечаток"/шаблон
Надо что то типа сравнение или поиск или сохранить (при наличии) Mime/Stream, может есть Base64, MD5 и т.д.
Естественно при сканировании сделать отступ сверху, где написаны тех данные (ФИО вариант и т.д.), т.е. только рабочую область ответов.
А потом бы уже ответы учеников сравнивал с уже готовыми шаблонами-отпечатками.
Надеюсь мысль хоть немного понятна)
------------------------------------------------------------
Конечно будет погрешность, но при сравнении просто учитывать эту погрешность.
Это про круги которые будут не полностью закрашены.
Тут надо проверять методом тыка.
------------------------------------------------------------
да уж, идея тупая :D

Автор - Сергей
Дата добавления - 27 Ноября 2015 в 12:15
markДата: Пт, 27 Ноября 2015, 13:09 | Сообщение # 16
Любопытный
Сергей, спасибо, но идея не годится. т.к. правильные ответы проще хранить в таблице, где есть поле-вариант и поле-правильные ответы. Я решил обработку ответов путем сравнения полученных ответов с правильными ответами.
Фамилия, вариант, ответы тестируемого записываются другую таблицу, сюда же записываются правильные ответы только после того как мы узнаем вариант, отобрав их с таблицы с правильными ответами. т.е. в одной строке ответы тестируемого и правильные, а там дело "техники". Плагин, который предлагает Мишем тоже не пойдет т.к. он распознает буквы и символы, а у меня ответ в виде закрашенного кружка. В моем примере я показал как узнать ответ тестируемого, мне кажется-это самый простой вариант.
Цитата Сергей ()
Надо что то типа сравнение или поиск или сохранить (при наличии) Mime/Stream, может есть Base64, MD5 и т.д.

В этом я не разбираюсь.

Добавлено (27 Ноября 2015, 13:08)
---------------------------------------------

Цитата Сергей ()
которые будут не полностью закрашены.

сразу предупредить тестируемого как надо закрашивать, какой ручкой, цветом, фломастер и т.д.

Добавлено (27 Ноября 2015, 13:09)
---------------------------------------------
иначе я не виноват :)

 
СообщениеСергей, спасибо, но идея не годится. т.к. правильные ответы проще хранить в таблице, где есть поле-вариант и поле-правильные ответы. Я решил обработку ответов путем сравнения полученных ответов с правильными ответами.
Фамилия, вариант, ответы тестируемого записываются другую таблицу, сюда же записываются правильные ответы только после того как мы узнаем вариант, отобрав их с таблицы с правильными ответами. т.е. в одной строке ответы тестируемого и правильные, а там дело "техники". Плагин, который предлагает Мишем тоже не пойдет т.к. он распознает буквы и символы, а у меня ответ в виде закрашенного кружка. В моем примере я показал как узнать ответ тестируемого, мне кажется-это самый простой вариант.
Цитата Сергей ()
Надо что то типа сравнение или поиск или сохранить (при наличии) Mime/Stream, может есть Base64, MD5 и т.д.

В этом я не разбираюсь.

Добавлено (27 Ноября 2015, 13:08)
---------------------------------------------

Цитата Сергей ()
которые будут не полностью закрашены.

сразу предупредить тестируемого как надо закрашивать, какой ручкой, цветом, фломастер и т.д.

Добавлено (27 Ноября 2015, 13:09)
---------------------------------------------
иначе я не виноват :)


Автор - mark
Дата добавления - 27 Ноября 2015 в 13:09
markДата: Пт, 27 Ноября 2015, 18:41 | Сообщение # 17
Любопытный
Так выглядит код кнопки "считать ответы" благодаря помощи Петра. Оказалось так просто. Это на случай двух и более ответов на один вопрос
Код
HideObject "PushButton50" "None" "0"
SetVar "[pred]" "          "
SetVar "[X]" "100"
SetVar "[Y]" "120"
.предмет
Loop "1" "10" "[Y]"
SetVar "[n]" "0"
Loop "1" "5" "[X]"
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
If "[Pos]" "=" "0,0,0"
StrDel "[pred]" "[Y]" "1" "[pred]"
SubStr "[Otv]" "[X]" "1" "[Cods]"
StrIns "[Cods]" "[pred]" "[Y]" "[pred]"
SetVar "[n]" "[n]+1"
If "[n]" ">" "1"
StrIns "?" "[pred]" "[Y]" "[pred]"
ExitLoop
EndIf
EndIf
EndLoop
EndLoop
Прикрепления: _...rar (13.4 Kb)
 
СообщениеТак выглядит код кнопки "считать ответы" благодаря помощи Петра. Оказалось так просто. Это на случай двух и более ответов на один вопрос
Код
HideObject "PushButton50" "None" "0"
SetVar "[pred]" "          "
SetVar "[X]" "100"
SetVar "[Y]" "120"
.предмет
Loop "1" "10" "[Y]"
SetVar "[n]" "0"
Loop "1" "5" "[X]"
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
If "[Pos]" "=" "0,0,0"
StrDel "[pred]" "[Y]" "1" "[pred]"
SubStr "[Otv]" "[X]" "1" "[Cods]"
StrIns "[Cods]" "[pred]" "[Y]" "[pred]"
SetVar "[n]" "[n]+1"
If "[n]" ">" "1"
StrIns "?" "[pred]" "[Y]" "[pred]"
ExitLoop
EndIf
EndIf
EndLoop
EndLoop

Автор - mark
Дата добавления - 27 Ноября 2015 в 18:41
mishemДата: Пт, 27 Ноября 2015, 23:36 | Сообщение # 18
Эксперт форума
Цитата mark ()
SetVar "[X]" "100"
SetVar "[Y]" "120"

Зачем присваивать значения этим переменным? Они не нужны.
Следующий код
Цитата mark ()
Loop "1" "10" "[Y]"
SetVar "[n]" "0"
Loop "1" "5" "[X]"

Меняет их на 1.
;)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата mark ()
SetVar "[X]" "100"
SetVar "[Y]" "120"

Зачем присваивать значения этим переменным? Они не нужны.
Следующий код
Цитата mark ()
Loop "1" "10" "[Y]"
SetVar "[n]" "0"
Loop "1" "5" "[X]"

Меняет их на 1.
;)

Автор - mishem
Дата добавления - 27 Ноября 2015 в 23:36
markДата: Сб, 28 Ноября 2015, 07:39 | Сообщение # 19
Любопытный
Цитата mark ()
SetVar "[X]" "100"
SetVar "[Y]" "120"

mishem, действительно лишний код. Видно он остался при проектировании, что бы расчитать координаты
Цитата mark ()
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"

А так заработало, ну и не стал ничего менять, хотя оптимизировать код не мешало бы.
 
Сообщение
Цитата mark ()
SetVar "[X]" "100"
SetVar "[Y]" "120"

mishem, действительно лишний код. Видно он остался при проектировании, что бы расчитать координаты
Цитата mark ()
hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"

А так заработало, ну и не стал ничего менять, хотя оптимизировать код не мешало бы.

Автор - mark
Дата добавления - 28 Ноября 2015 в 07:39
mishemДата: Сб, 28 Ноября 2015, 15:53 | Сообщение # 20
Эксперт форума
Цитата mark ()
SetVar "[n]" "[n]+1"
If "[n]" ">" "1"

При втором верном условии n всегда будет больше 1.
Да и вообще зачем здесь это надо?

Цитата mark ()
If "[Pos]" "=" "0,0,0"


то так или иначе нужно

Цитата mark ()
StrIns "?" "[pred]" "[Y]" "[pred]"


а при первом верном результате эта запись не произойдет, так как 1 не больше 1

Вы этого не замечаете так как переменная n у вас не удаляется по завершению сценария.

Я советовал бы практически в каждом скрипте использовать

ClearVariables ""

и внести список всех не нужных переменных после выполнения скрипта.
Правда бывает что под "шумок" туда попадают и нужные, по этому к этому делу нужно внимательно подходить.

Цитата mark ()
хотя оптимизировать код не мешало бы.

10 строчек кода? :)

У ва есть отладчик. Запускайте выполнение пошагово и смотрите что происходит и как выполняется код. Иногда замена условия с < на > или = меняет полностью структуру кода.

Не брезгуйте подпрограммами. Интерпретатору не нужно будет обрабатывать весь код если условие не верно. он обработает только одну строку

GoSub ""

Так же можно использовать Return, об этом я уже говорил в какой то теме, правда некоторые со мной не согласились. :)

Экспериментируйте. :)

Добавлено (28 Ноября 2015, 13:48)
---------------------------------------------

Цитата mark ()
SetVar "[n]" "0"

Ага, я просмотрел эту строчку, прежде чем то что я написал выше. :)

Тогда вообще не понятно как у вас записывается первое найденное верное решение? Если в ответах [Pos] <> 0,0,0, то соответственно все что после
Код
If "[Pos]" "=" "0,0,0"

не будет выполнено.

И строка не будет записана в [pred].

Мож я что то упускаю? Я просто смотрю по коду который выше.

SetVar "[pred]" " "

После

StrDel "[pred]" "[Y]" "1" "[pred]"

а что там удаляется если она пустая? ну и т.д.

Короче как всегда, проще написать свой код, чем разбирать чужой. :D

Добавлено (28 Ноября 2015, 15:53)
---------------------------------------------

Цитата mishem ()
Мож я что то упускаю?

Да, упустил... :)
Цитата mark ()
Это на случай двух и более ответов на один вопрос


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата mark ()
SetVar "[n]" "[n]+1"
If "[n]" ">" "1"

При втором верном условии n всегда будет больше 1.
Да и вообще зачем здесь это надо?

Цитата mark ()
If "[Pos]" "=" "0,0,0"


то так или иначе нужно

Цитата mark ()
StrIns "?" "[pred]" "[Y]" "[pred]"


а при первом верном результате эта запись не произойдет, так как 1 не больше 1

Вы этого не замечаете так как переменная n у вас не удаляется по завершению сценария.

Я советовал бы практически в каждом скрипте использовать

ClearVariables ""

и внести список всех не нужных переменных после выполнения скрипта.
Правда бывает что под "шумок" туда попадают и нужные, по этому к этому делу нужно внимательно подходить.

Цитата mark ()
хотя оптимизировать код не мешало бы.

10 строчек кода? :)

У ва есть отладчик. Запускайте выполнение пошагово и смотрите что происходит и как выполняется код. Иногда замена условия с < на > или = меняет полностью структуру кода.

Не брезгуйте подпрограммами. Интерпретатору не нужно будет обрабатывать весь код если условие не верно. он обработает только одну строку

GoSub ""

Так же можно использовать Return, об этом я уже говорил в какой то теме, правда некоторые со мной не согласились. :)

Экспериментируйте. :)

Добавлено (28 Ноября 2015, 13:48)
---------------------------------------------

Цитата mark ()
SetVar "[n]" "0"

Ага, я просмотрел эту строчку, прежде чем то что я написал выше. :)

Тогда вообще не понятно как у вас записывается первое найденное верное решение? Если в ответах [Pos] <> 0,0,0, то соответственно все что после
Код
If "[Pos]" "=" "0,0,0"

не будет выполнено.

И строка не будет записана в [pred].

Мож я что то упускаю? Я просто смотрю по коду который выше.

SetVar "[pred]" " "

После

StrDel "[pred]" "[Y]" "1" "[pred]"

а что там удаляется если она пустая? ну и т.д.

Короче как всегда, проще написать свой код, чем разбирать чужой. :D

Добавлено (28 Ноября 2015, 15:53)
---------------------------------------------

Цитата mishem ()
Мож я что то упускаю?

Да, упустил... :)
Цитата mark ()
Это на случай двух и более ответов на один вопрос

Автор - mishem
Дата добавления - 28 Ноября 2015 в 15:53
markДата: Сб, 28 Ноября 2015, 16:19 | Сообщение # 21
Любопытный
Цитата mishem ()
Короче как всегда, проще написать свой код, чем разбирать чужой.

100% согласен mishem, ну наверное для этого и создан форум, что бы таким как я "непрограммистам"как-то помогать.
Цитата mishem ()
Мож я что то упускаю? Я просто смотрю по коду который выше.

SetVar "[pred]" " "

После
StrDel "[pred]" "[Y]" "1" "[pred]"
а что там удаляется если она пустая? ну и т.д.

mishem, переменной [pred] присваивается 10 пробелов
[/code]SetVar "[pred]" "          "[code]
когда If "[Pos]" "=" "0,0,0" удаляется лишний пробел, вместо него записывается переменная [pred], а если строка пустая т.е. студент не закрасил тогда пустой пробел остаётся (т.е. длина строки не должна меняться, 10 символов), это что бы знать на какие он ответил на какие нет а где 2 кружочка закрасил, ну и при обработке ответа эти пробелы нужны т.е. длина строки ответа должна быть равна длине строки правильных ответов. У меня на картинке есть такой вариант и в ответе мы видим небольшой отступ в ответе. Сейчас кумекаю над обработкой ответа. Короче всё будет записываться в таблицы, как я писал выше.

Добавлено (28 Ноября 2015, 16:19)
---------------------------------------------
посмотрел свой первый вариант, там действительно пусто, извиняюсь должно быть

Цитата mark ()

SetVar "[pred]" "          "
 
Сообщение
Цитата mishem ()
Короче как всегда, проще написать свой код, чем разбирать чужой.

100% согласен mishem, ну наверное для этого и создан форум, что бы таким как я "непрограммистам"как-то помогать.
Цитата mishem ()
Мож я что то упускаю? Я просто смотрю по коду который выше.

SetVar "[pred]" " "

После
StrDel "[pred]" "[Y]" "1" "[pred]"
а что там удаляется если она пустая? ну и т.д.

mishem, переменной [pred] присваивается 10 пробелов
[/code]SetVar "[pred]" "          "[code]
когда If "[Pos]" "=" "0,0,0" удаляется лишний пробел, вместо него записывается переменная [pred], а если строка пустая т.е. студент не закрасил тогда пустой пробел остаётся (т.е. длина строки не должна меняться, 10 символов), это что бы знать на какие он ответил на какие нет а где 2 кружочка закрасил, ну и при обработке ответа эти пробелы нужны т.е. длина строки ответа должна быть равна длине строки правильных ответов. У меня на картинке есть такой вариант и в ответе мы видим небольшой отступ в ответе. Сейчас кумекаю над обработкой ответа. Короче всё будет записываться в таблицы, как я писал выше.

Добавлено (28 Ноября 2015, 16:19)
---------------------------------------------
посмотрел свой первый вариант, там действительно пусто, извиняюсь должно быть

Цитата mark ()

SetVar "[pred]" "          "

Автор - mark
Дата добавления - 28 Ноября 2015 в 16:19
mishemДата: Сб, 28 Ноября 2015, 16:35 | Сообщение # 22
Эксперт форума
Я бы наверно так сделал. Повесил бы этот код на кнопку "Загрузить изображение"
Строку
hpwImageCreate "Rectangle1" "" "" "" "" "" "" ""
перенес бы на запуск проекта или на открытие страницы. нет смысла каждый раз создавать объект.
Здесь код если пустой ответ тоже не засчитывается.

Код

.не нужны так как в дальнейшем будут изменяться или удаляться
.SetVar "[FIO]" ""
.SetVar "[pred]" ""
FileOpenBox "Выберите файл" "Изображение|*.bmp" "[PubDir]" "[File]" ""
If "[File]" "=" ""
. нет смысла дальше обрабатывать код
    Return
EndIf

.размер нигде не меняется, зачем эта команда?
.    SizeObject "Rectangle1" "-1" "-1"
. выполняем при запуске один раз или при открытии страницы
. hpwImageCreate "Rectangle1" "" "" "" "" "" "" ""
    hpwImageLoadFromFile "Rectangle1" "[File]" "0" "0" "" ""
    ShowObject "PushButton50" "None" "0"
    ExtractFileName "[File]" "[FIO]"
.заменяем на одну строку
.    StrLen "[FIO]" "[kol]"
.    StrDel "[FIO]" "[kol]-3" "4" "[FIO]"
    ChangeFileExt "[FIO]" "" "[FIO]"
    
ClearVariables "pred"
.предмет
Loop "1" "10" "[Y]"
    ClearVariables "n"
    Loop "1" "5" "[X]"
        hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
        If "[Pos]" "=" "0,0,0"
            SetVar "[n]" "[n]+1"
.            StrDel "[pred]" "[Y]" "1" "[pred]"
            SubStr "[Otv]" "[X]" "1" "[Cods]"
            StrIns "[Cods]" "[pred]" "[Y]" "[pred]"

            If "[n]" ">" "1"
                AlertBox "Ошибка" "Ответ не засчитан, два и более ответов в [Y] строке.|Выполнение дальнейшей обработки остановлено."
                ClearVariables "pred,x,y,n,Cods,Pos"
                Return
                .или закомментируйте Return
                GotoLine ":Error"
            EndIf
        EndIf
    EndLoop
    If "[n]" "=" ""
          AlertBox "Ошибка" "Ответ не засчитан, в [Y] строке нет ни одного ответа.|Выполнение дальнейшей обработки остановлено."
          ClearVariables "pred,x,y,n,Cods,Pos"
          Return
          .или закомментируйте Return
          GotoLine ":Error"
    EndIf
EndLoop
ClearVariables "x,y,n,Cods,Pos"
:Error
If "[n]" ">" "1"
    .Здесь какой то код
EndIf


Если пустой ответ засчитывается, то вместо
Код

    If "[n]" "=" ""
          AlertBox "Ошибка" "Ответ не засчитан, в [Y] строке нет ни одного ответа.|Выполнение дальнейшей обработки остановлено."
          ClearVariables "pred,x,y,n,Cods,Pos"
          Return
          .или закомментируйте Return
          GotoLine ":Error"
    EndIf

пишем
Код

    If "[n]" "=" ""
          StrIns "[#32]" "[pred]" "[Y]" "[pred]"
    EndIf


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеЯ бы наверно так сделал. Повесил бы этот код на кнопку "Загрузить изображение"
Строку
hpwImageCreate "Rectangle1" "" "" "" "" "" "" ""
перенес бы на запуск проекта или на открытие страницы. нет смысла каждый раз создавать объект.
Здесь код если пустой ответ тоже не засчитывается.

Код

.не нужны так как в дальнейшем будут изменяться или удаляться
.SetVar "[FIO]" ""
.SetVar "[pred]" ""
FileOpenBox "Выберите файл" "Изображение|*.bmp" "[PubDir]" "[File]" ""
If "[File]" "=" ""
. нет смысла дальше обрабатывать код
    Return
EndIf

.размер нигде не меняется, зачем эта команда?
.    SizeObject "Rectangle1" "-1" "-1"
. выполняем при запуске один раз или при открытии страницы
. hpwImageCreate "Rectangle1" "" "" "" "" "" "" ""
    hpwImageLoadFromFile "Rectangle1" "[File]" "0" "0" "" ""
    ShowObject "PushButton50" "None" "0"
    ExtractFileName "[File]" "[FIO]"
.заменяем на одну строку
.    StrLen "[FIO]" "[kol]"
.    StrDel "[FIO]" "[kol]-3" "4" "[FIO]"
    ChangeFileExt "[FIO]" "" "[FIO]"
    
ClearVariables "pred"
.предмет
Loop "1" "10" "[Y]"
    ClearVariables "n"
    Loop "1" "5" "[X]"
        hpwImageGetColor "Rectangle1" "[X]*60+40" "[Y]*60+60" "RGB" "[Pos]"
        If "[Pos]" "=" "0,0,0"
            SetVar "[n]" "[n]+1"
.            StrDel "[pred]" "[Y]" "1" "[pred]"
            SubStr "[Otv]" "[X]" "1" "[Cods]"
            StrIns "[Cods]" "[pred]" "[Y]" "[pred]"

            If "[n]" ">" "1"
                AlertBox "Ошибка" "Ответ не засчитан, два и более ответов в [Y] строке.|Выполнение дальнейшей обработки остановлено."
                ClearVariables "pred,x,y,n,Cods,Pos"
                Return
                .или закомментируйте Return
                GotoLine ":Error"
            EndIf
        EndIf
    EndLoop
    If "[n]" "=" ""
          AlertBox "Ошибка" "Ответ не засчитан, в [Y] строке нет ни одного ответа.|Выполнение дальнейшей обработки остановлено."
          ClearVariables "pred,x,y,n,Cods,Pos"
          Return
          .или закомментируйте Return
          GotoLine ":Error"
    EndIf
EndLoop
ClearVariables "x,y,n,Cods,Pos"
:Error
If "[n]" ">" "1"
    .Здесь какой то код
EndIf


Если пустой ответ засчитывается, то вместо
Код

    If "[n]" "=" ""
          AlertBox "Ошибка" "Ответ не засчитан, в [Y] строке нет ни одного ответа.|Выполнение дальнейшей обработки остановлено."
          ClearVariables "pred,x,y,n,Cods,Pos"
          Return
          .или закомментируйте Return
          GotoLine ":Error"
    EndIf

пишем
Код

    If "[n]" "=" ""
          StrIns "[#32]" "[pred]" "[Y]" "[pred]"
    EndIf

Автор - mishem
Дата добавления - 28 Ноября 2015 в 16:35
markДата: Сб, 28 Ноября 2015, 17:15 | Сообщение # 23
Любопытный
mishem, моя ошибка наверное в том, что здесь я не раскрываю полностью замысел своего проекта, ниже привожу кратко....

mishem,
Цитата mishem ()
Я бы наверно так сделал. Повесил бы этот код на кнопку "Загрузить изображение"

В проекте все вешается на 1 кнопку и называется она "Сканировать ответы" (т.е. там и сканирование, загрузка изображения, обработка и т.д. ит.д пока не закончится сканирование), потом печать результатов
Ну, это просто пример, что бы вы могли протестировать с тем или иным ответом, а вот
Цитата mishem ()
If "[n]" "=" ""
          AlertBox "Ошибка" "Ответ не засчитан, в [Y] строке нет ни одного ответа.|Выполнение дальнейшей обработки остановлено."
          ClearVariables "pred,x,y,n,Cods,Pos"
          Return
          .или закомментируйте Return
          GotoLine ":Error"

ну это вообще не надо т.к. ответы пропускаются через потоковый сканер и потом также автоматом обрабатываются без всяких Алертов, т.е. как ответил так ответил, но в анализе ответа будет отражено что стоит типа ? или пусто (дална 2 и более ответа или не ответил на данный вопрос), их ведь, тестируемых, будет много более 100 да вопросов будет поболее 10, я ведь просто дал простой пример.

Добавлено (28 Ноября 2015, 17:01)
---------------------------------------------
и просил совета по увеличению обработки, а так некоторые советы учту конечно.

Добавлено (28 Ноября 2015, 17:15)
---------------------------------------------

Цитата mishem ()
.не нужны так как в дальнейшем будут изменяться или удаляться
.SetVar "[FIO]" ""
.SetVar "[pred]" ""

если убрать то не отображается пробел
 
Сообщениеmishem, моя ошибка наверное в том, что здесь я не раскрываю полностью замысел своего проекта, ниже привожу кратко....

mishem,
Цитата mishem ()
Я бы наверно так сделал. Повесил бы этот код на кнопку "Загрузить изображение"

В проекте все вешается на 1 кнопку и называется она "Сканировать ответы" (т.е. там и сканирование, загрузка изображения, обработка и т.д. ит.д пока не закончится сканирование), потом печать результатов
Ну, это просто пример, что бы вы могли протестировать с тем или иным ответом, а вот
Цитата mishem ()
If "[n]" "=" ""
          AlertBox "Ошибка" "Ответ не засчитан, в [Y] строке нет ни одного ответа.|Выполнение дальнейшей обработки остановлено."
          ClearVariables "pred,x,y,n,Cods,Pos"
          Return
          .или закомментируйте Return
          GotoLine ":Error"

ну это вообще не надо т.к. ответы пропускаются через потоковый сканер и потом также автоматом обрабатываются без всяких Алертов, т.е. как ответил так ответил, но в анализе ответа будет отражено что стоит типа ? или пусто (дална 2 и более ответа или не ответил на данный вопрос), их ведь, тестируемых, будет много более 100 да вопросов будет поболее 10, я ведь просто дал простой пример.

Добавлено (28 Ноября 2015, 17:01)
---------------------------------------------
и просил совета по увеличению обработки, а так некоторые советы учту конечно.

Добавлено (28 Ноября 2015, 17:15)
---------------------------------------------

Цитата mishem ()
.не нужны так как в дальнейшем будут изменяться или удаляться
.SetVar "[FIO]" ""
.SetVar "[pred]" ""

если убрать то не отображается пробел

Автор - mark
Дата добавления - 28 Ноября 2015 в 17:15
mishemДата: Сб, 28 Ноября 2015, 19:09 | Сообщение # 24
Эксперт форума
Цитата mark ()
что здесь я не раскрываю полностью замысел своего проекта

Ну это не ошибка, хотя мы именно отталкиваемся от поставленной задачи. А дальше уже вам самим разбираться что нужно, а что нет.

Цитата mark ()
обрабатываются без всяких Алертов

Алерт для вас, чтобы вы видели именно тот момент когда прерывается обработка. Я вам показал как прервать цикл.

К примеру в строке не 5 а 10,20... ответов. По условию два ответа не допустимы. А вот дальше условий ваших я не знаю. Можно добавить условие что первый ответ по порядку будет засчитываться, можно если 2 ответа то ответ считается не верным, или вообще все ответы считаются не верными. И на каждое условие есть свое решение построения кода.

1. Если первый ответ засчитывается, зачем перебирать дальше?
2. Если 2 ответа в строке не принимается только эта строка, то опять, зачем перебирать следующие ответы в строке если нашли в одной строке второй ответ?
3. Если 2 ответа в одной строке и считается что весь тест не верный, то зачем перебирать следующие строки?

Вместо алерта вы можете вставить что угодно. Переменную которая будет содержать что то или еще что нибудь....

Цитата mark ()
если убрать то не отображается пробел

Цитата mishem ()
пишем
If "[n]" "=" ""
      StrIns "[#32]" "[pred]" "[Y]" "[pred]"
EndIf


[#32] = пробел


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата mark ()
что здесь я не раскрываю полностью замысел своего проекта

Ну это не ошибка, хотя мы именно отталкиваемся от поставленной задачи. А дальше уже вам самим разбираться что нужно, а что нет.

Цитата mark ()
обрабатываются без всяких Алертов

Алерт для вас, чтобы вы видели именно тот момент когда прерывается обработка. Я вам показал как прервать цикл.

К примеру в строке не 5 а 10,20... ответов. По условию два ответа не допустимы. А вот дальше условий ваших я не знаю. Можно добавить условие что первый ответ по порядку будет засчитываться, можно если 2 ответа то ответ считается не верным, или вообще все ответы считаются не верными. И на каждое условие есть свое решение построения кода.

1. Если первый ответ засчитывается, зачем перебирать дальше?
2. Если 2 ответа в строке не принимается только эта строка, то опять, зачем перебирать следующие ответы в строке если нашли в одной строке второй ответ?
3. Если 2 ответа в одной строке и считается что весь тест не верный, то зачем перебирать следующие строки?

Вместо алерта вы можете вставить что угодно. Переменную которая будет содержать что то или еще что нибудь....

Цитата mark ()
если убрать то не отображается пробел

Цитата mishem ()
пишем
If "[n]" "=" ""
      StrIns "[#32]" "[pred]" "[Y]" "[pred]"
EndIf


[#32] = пробел

Автор - mishem
Дата добавления - 28 Ноября 2015 в 19:09
markДата: Вс, 29 Ноября 2015, 09:26 | Сообщение # 25
Любопытный
Цитата mishem ()
1. Если первый ответ засчитывается, зачем перебирать дальше?
2. Если 2 ответа в строке не принимается только эта строка, то опять, зачем перебирать следующие ответы в строке если нашли в одной строке второй ответ?
3. Если 2 ответа в одной строке и считается что весь тест не верный, то зачем перебирать следующие строки?


Условие-из 5 ответов только один правильный, а вопросов может быть более 100 и на каждый вопрос, повторюсь один правильный ответ
Пример;
1) Решите пример 2*2
A) 1
B ) 2
C) 3
D) 4
E) 5
Или я что-то не договорил или вы не поняли смысл для чего проверяю дальше, а проверяю для того что бы выявить может еще закрашен кружок или в случае когда ничего не закрашено, чтобы в своем ответе проставить знак вопроса или пробел это нужно для того чтобы потом обработать ответ сравнив их с правильными ответами. Ведь обрабатывать ответы я буду после того как узнаю вариант теста. Я же до этого не знаю какой вариант пока все не просканирую. Всё записывается в таблицу как есть на листе ответов .
Цитата mishem ()
[#32] = пробел

В принципе код будет работать так же, но этот момент учту.

Добавлено (28 Ноября 2015, 19:49)
---------------------------------------------
Лучше наверное я приготовлю пример что бы понять лучше мою идею

Добавлено (29 Ноября 2015, 09:26)
---------------------------------------------

Цитата mishem ()
Интерпретатору не нужно будет обрабатывать весь код если условие не верно. он обработает только одну строку

Мне кажется код сканируется весь, а подпрограмма нужна для того что бы обрабатывать повторяющиеся коды, чтобы не увеличивать количество строк кода ну и как вспомогательное средство в некоторых операторах типа dbfCreate и т.д. Может я не прав.
 
Сообщение
Цитата mishem ()
1. Если первый ответ засчитывается, зачем перебирать дальше?
2. Если 2 ответа в строке не принимается только эта строка, то опять, зачем перебирать следующие ответы в строке если нашли в одной строке второй ответ?
3. Если 2 ответа в одной строке и считается что весь тест не верный, то зачем перебирать следующие строки?


Условие-из 5 ответов только один правильный, а вопросов может быть более 100 и на каждый вопрос, повторюсь один правильный ответ
Пример;
1) Решите пример 2*2
A) 1
B ) 2
C) 3
D) 4
E) 5
Или я что-то не договорил или вы не поняли смысл для чего проверяю дальше, а проверяю для того что бы выявить может еще закрашен кружок или в случае когда ничего не закрашено, чтобы в своем ответе проставить знак вопроса или пробел это нужно для того чтобы потом обработать ответ сравнив их с правильными ответами. Ведь обрабатывать ответы я буду после того как узнаю вариант теста. Я же до этого не знаю какой вариант пока все не просканирую. Всё записывается в таблицу как есть на листе ответов .
Цитата mishem ()
[#32] = пробел

В принципе код будет работать так же, но этот момент учту.

Добавлено (28 Ноября 2015, 19:49)
---------------------------------------------
Лучше наверное я приготовлю пример что бы понять лучше мою идею

Добавлено (29 Ноября 2015, 09:26)
---------------------------------------------

Цитата mishem ()
Интерпретатору не нужно будет обрабатывать весь код если условие не верно. он обработает только одну строку

Мне кажется код сканируется весь, а подпрограмма нужна для того что бы обрабатывать повторяющиеся коды, чтобы не увеличивать количество строк кода ну и как вспомогательное средство в некоторых операторах типа dbfCreate и т.д. Может я не прав.

Автор - mark
Дата добавления - 29 Ноября 2015 в 09:26
antonДата: Вс, 29 Ноября 2015, 10:13 | Сообщение # 26
Ветеран форума
Цитата Peter ()
Да и JS в данном случае скорости тоже не добавит.

Ну как не добавит, маленько добавит. Накалякал на скорую руку тест неубушого Loop и jsLoop и Необушный пока проигрывает js. На заполнение Листбокса 12 секунд потребовалсь циклу написанному на JS и 17 сек необушному Loop. Но конечно надо проверят в реальной работе, реализуя конкретную задачу.


Скачать тест и JS функцию в архиве
Прикрепления: 7658601.png (45.9 Kb) · jsLoopTest.zip (670.6 Kb)


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"

Сообщение отредактировано
anton - Вс, 29 Ноября 2015, 10:26
 
Сообщение
Цитата Peter ()
Да и JS в данном случае скорости тоже не добавит.

Ну как не добавит, маленько добавит. Накалякал на скорую руку тест неубушого Loop и jsLoop и Необушный пока проигрывает js. На заполнение Листбокса 12 секунд потребовалсь циклу написанному на JS и 17 сек необушному Loop. Но конечно надо проверят в реальной работе, реализуя конкретную задачу.


Скачать тест и JS функцию в архиве

Автор - anton
Дата добавления - 29 Ноября 2015 в 10:13
markДата: Вс, 29 Ноября 2015, 11:14 | Сообщение # 27
Любопытный
А теперь сравните
 
СообщениеА теперь сравните

Автор - mark
Дата добавления - 29 Ноября 2015 в 11:14
PeterДата: Вс, 29 Ноября 2015, 12:48 | Сообщение # 28
Админ NeoBook
Цитата mark ()
А теперь сравните

Цитата anton ()
и Необушный пока проигрывает

Гм...
В пределах погрешности:


14 секунд - JS
15 секунд - необушный скрипт.

В прилагаемом же к архиву скомпилированном приложении пришли к финишу одинаково:

И потом, 1000 срабатываний для необушного цикла уже многовато, я уже это отмечал
Сейчас вспомнил - когда как-то давно тестировал циклы, то скорость работы необушного скрипта начинает падать где-то после 200-250 срабатываний, и чем дальше, тем -сильнее.
Так-что...

Цитата anton ()
реализуя конкретную задачу.

Верно, но я - за необушный скрипт.
Прикрепления: 7964700.png (19.2 Kb) · 9576810.png (19.6 Kb)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата mark ()
А теперь сравните

Цитата anton ()
и Необушный пока проигрывает

Гм...
В пределах погрешности:


14 секунд - JS
15 секунд - необушный скрипт.

В прилагаемом же к архиву скомпилированном приложении пришли к финишу одинаково:

И потом, 1000 срабатываний для необушного цикла уже многовато, я уже это отмечал
Сейчас вспомнил - когда как-то давно тестировал циклы, то скорость работы необушного скрипта начинает падать где-то после 200-250 срабатываний, и чем дальше, тем -сильнее.
Так-что...

Цитата anton ()
реализуя конкретную задачу.

Верно, но я - за необушный скрипт.

Автор - Peter
Дата добавления - 29 Ноября 2015 в 12:48
PeterДата: Вс, 29 Ноября 2015, 13:46 | Сообщение # 29
Админ NeoBook
Модернизировал подпрограммы следующим образом:
Код
:test
Math "[Val]+1" "0" "[Val]"
Return

:test2
Math "[Val]+1" "0" "[Val]"
Return

Переменную [Val] перед циклом, естественно, каждый раз обнуляем.

Получился весьма интересный результат:

Нужно заметить, что делал несколько "замеров", и в большинстве случаев (60-70%) результат по времени одинаков, но, если проигрывал, то почти всегда - JS...
Тут, видимо играет роль в каком месте "стартовой" секунды начинается отсчет времени (нажатие кнопки), но в любом случае - показательно..

Добавлено (29 Ноября 2015, 13:46)
---------------------------------------------
Цитата mark ()
Мне кажется код сканируется весь, а подпрограмма нужна для того что бы обрабатывать повторяющиеся коды, чтобы не увеличивать количество строк кода ну и как вспомогательное средство в некоторых операторах типа dbfCreate и т.д. Может я не прав.

Забыл сказать...
Это все можно проследить по отладчику.
;)
Прикрепления: 4917052.png (11.5 Kb)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
СообщениеМодернизировал подпрограммы следующим образом:
Код
:test
Math "[Val]+1" "0" "[Val]"
Return

:test2
Math "[Val]+1" "0" "[Val]"
Return

Переменную [Val] перед циклом, естественно, каждый раз обнуляем.

Получился весьма интересный результат:

Нужно заметить, что делал несколько "замеров", и в большинстве случаев (60-70%) результат по времени одинаков, но, если проигрывал, то почти всегда - JS...
Тут, видимо играет роль в каком месте "стартовой" секунды начинается отсчет времени (нажатие кнопки), но в любом случае - показательно..

Добавлено (29 Ноября 2015, 13:46)
---------------------------------------------
Цитата mark ()
Мне кажется код сканируется весь, а подпрограмма нужна для того что бы обрабатывать повторяющиеся коды, чтобы не увеличивать количество строк кода ну и как вспомогательное средство в некоторых операторах типа dbfCreate и т.д. Может я не прав.

Забыл сказать...
Это все можно проследить по отладчику.
;)

Автор - Peter
Дата добавления - 29 Ноября 2015 в 13:46
markДата: Вс, 29 Ноября 2015, 14:52 | Сообщение # 30
Любопытный
Цитата Peter ()
Верно, но я - за необушный скрипт.

Значит будем использовать необушный скрипт.
Выкладываю немного доработанный пример . В дальнейшем, как я говорил выше, буду все цеплять на одну кнопку.

Добавлено (29 Ноября 2015, 14:52)
---------------------------------------------

Цитата Peter ()
Забыл сказать...
Это все можно проследить по отладчику.

В отладчике по моему все команды кода присутствуют, но только не пойму то, что серым цветом тоже обрабатывается?
Прикрепления: Test1.rar (46.5 Kb)
 
Сообщение
Цитата Peter ()
Верно, но я - за необушный скрипт.

Значит будем использовать необушный скрипт.
Выкладываю немного доработанный пример . В дальнейшем, как я говорил выше, буду все цеплять на одну кнопку.

Добавлено (29 Ноября 2015, 14:52)
---------------------------------------------

Цитата Peter ()
Забыл сказать...
Это все можно проследить по отладчику.

В отладчике по моему все команды кода присутствуют, но только не пойму то, что серым цветом тоже обрабатывается?

Автор - mark
Дата добавления - 29 Ноября 2015 в 14:52
Форум NeoBook » Всё о программе NeoBook » Проекты NeoBook » Пример обработки теста (Обработка тестов на бумажном бланке)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: