2019-09-28 21:42:04 +03:00
< template >
2020-06-26 04:39:14 -07:00
< div >
2020-07-31 13:50:50 -07:00
< v-row
no - gutters
class = "pa-3"
>
< v-col
cols = "12"
md = "7"
2020-06-26 04:39:14 -07:00
>
2020-08-14 12:39:21 -07:00
<!-- Camera card -- >
2020-07-31 13:50:50 -07:00
< v-card
class = "mb-3 pr-6 pb-3"
color = "primary"
dark
>
< v-card-title > Camera Settings < / v-card-title >
< div class = "ml-5" >
< CVselect
v - model = "currentCameraIndex"
name = "Camera"
select - cols = "10"
: list = "$store.getters.cameraList"
@ input = "handleInput('currentCamera',currentCameraIndex)"
/ >
< CVnumberinput
v - model = "cameraSettings.fov"
2020-08-14 12:39:21 -07:00
: tooltip = "cameraSettings.isFovConfigurable ? 'Field of view (in degrees) of the camera measured across the diagonal of the frame' : 'This setting is managed by a vendor'"
2020-07-31 13:50:50 -07:00
name = "Diagonal FOV"
2020-08-14 12:39:21 -07:00
: disabled = "!cameraSettings.isFovConfigurable"
2020-07-31 13:50:50 -07:00
/ >
< br >
< CVnumberinput
2020-08-14 12:39:21 -07:00
v - model = "cameraSettings.tiltDegrees"
2020-07-31 13:50:50 -07:00
name = "Camera pitch"
tooltip = "How many degrees above the horizontal the physical camera is tilted"
: step = "0.01"
/ >
< br >
< v-btn
style = "margin-top:10px"
small
color = "secondary"
@ click = "sendCameraSettings"
>
< v-icon left >
mdi - content - save
< / v-icon >
Save Camera Settings
< / v-btn >
< / div >
< / v-card >
2020-08-14 12:39:21 -07:00
<!-- Calibration card -- >
2020-07-31 13:50:50 -07:00
< v-card
class = "pr-6 pb-3"
color = "primary"
2020-06-26 04:39:14 -07:00
dark
2020-07-31 13:50:50 -07:00
>
< v-card-title > Camera Calibration < / v-card-title >
2020-08-14 12:39:21 -07:00
2020-07-31 13:50:50 -07:00
< div class = "ml-5" >
< v-row >
2020-08-14 12:39:21 -07:00
<!-- Calibration input -- >
< v-col
cols = "12"
md = "6"
>
2020-07-31 13:50:50 -07:00
< CVselect
2020-08-14 12:39:21 -07:00
v - model = "selectedFilteredResIndex"
2020-07-31 13:50:50 -07:00
name = "Resolution"
2020-08-14 12:39:21 -07:00
select - cols = "7"
2020-07-31 13:50:50 -07:00
: list = "stringResolutionList"
2020-08-14 12:39:21 -07:00
: disabled = "isCalibrating"
tooltip = "Resolution to calibrate at (you will have to calibrate every resolution you use 3D mode on)"
/ >
< CVselect
v - model = "boardType"
name = "Board Type"
select - cols = "7"
: list = "['Chessboard', 'Dot Grid']"
: disabled = "isCalibrating"
tooltip = "Calibration board pattern to use"
/ >
< CVnumberinput
v - model = "squareSizeIn"
name = "Pattern Spacing (in)"
label - cols = "5"
tooltip = "Spacing between pattern features in inches"
: disabled = "isCalibrating"
/ >
< CVnumberinput
v - model = "boardWidth"
name = "Board width"
label - cols = "5"
2020-10-13 06:58:50 -07:00
tooltip = "Width of the board in dots or chessboard squares; with the standard chessboard, this is usually 8"
2020-08-14 12:39:21 -07:00
: disabled = "isCalibrating"
/ >
< CVnumberinput
v - model = "boardHeight"
name = "Board height"
label - cols = "5"
2020-10-13 06:58:50 -07:00
tooltip = "Height of the board in dots or chessboard squares; with the standard chessboard, this is usually 8"
2020-08-14 12:39:21 -07:00
: disabled = "isCalibrating"
2020-07-31 13:50:50 -07:00
/ >
< / v-col >
2020-08-14 12:39:21 -07:00
<!-- Calibrated table -- >
2020-07-31 13:50:50 -07:00
< v-col
2020-08-14 12:39:21 -07:00
cols = "12"
md = "6"
2020-07-31 13:50:50 -07:00
>
2020-08-14 12:39:21 -07:00
< v-row
align = "start"
class = "pb-4"
>
< v-simple-table
fixed - header
height = "100%"
dense
>
< thead style = "font-size: 1.25rem;" >
< tr >
< th class = "text-center" >
< tooltipped-label text = "Resolution" / >
< / th >
< th class = "text-center" >
< tooltipped-label
tooltip = "Average reprojection error of the calibration, in pixels"
text = "Mean Error"
/ >
< / th >
< th class = "text-center" >
< tooltipped-label
tooltip = "Standard deviation of the mean error, in pixels"
text = "Standard Deviation"
/ >
< / th >
< / tr >
< / thead >
< tbody >
< tr
v - for = "(value, index) in filteredResolutionList"
: key = "index"
>
< td > { { value . width } } X { { value . height } } < / td >
< td >
{ { isCalibrated ( value ) ? value . mean . toFixed ( 2 ) + "px" : "—" } }
< / td >
< td > { { isCalibrated ( value ) ? value . standardDeviation . toFixed ( 2 ) + "px" : "—" } } < / td >
< / tr >
< / tbody >
< / v-simple-table >
< / v-row >
< v-row justify = "center" >
< v-chip
v - show = "isCalibrating"
label
: color = "snapshotAmount < 25 ? 'grey' : 'secondary'"
>
Snapshots : { { snapshotAmount } } of at least { { minSnapshots } }
< / v-chip >
< / v-row >
< / v-col >
< / v-row >
< v-row v-if = "isCalibrating" >
< v-col
cols = "12"
class = "pt-0"
>
< CVslider
v - model = "$store.getters.currentPipelineSettings.cameraExposure"
name = "Exposure"
: min = "0"
: max = "100"
slider - cols = "8"
@ input = "e => handlePipelineUpdate('cameraExposure', e)"
/ >
< CVslider
2020-10-05 19:22:58 -07:00
v - model = "$store.getters.currentPipelineSettings.cameraBrightness"
2020-08-14 12:39:21 -07:00
name = "Brightness"
: min = "0"
: max = "100"
slider - cols = "8"
@ input = "e => handlePipelineUpdate('cameraBrightness', e)"
/ >
< CVslider
v - if = "$store.getters.currentPipelineSettings.cameraGain !== -1"
v - model = "$store.getters.currentPipelineSettings.cameraGain"
name = "Gain"
: min = "0"
: max = "100"
slider - cols = "8"
@ input = "e => handlePipelineUpdate('cameraGain', e)"
2020-07-31 13:50:50 -07:00
/ >
< / v-col >
< / v-row >
2020-08-14 12:39:21 -07:00
2020-07-31 13:50:50 -07:00
< v-row >
2020-08-14 12:39:21 -07:00
< v-col align -self = " center " >
2020-07-31 13:50:50 -07:00
< v-btn
small
color = "secondary"
2020-08-14 12:39:21 -07:00
style = "width: 100%;"
: disabled = "disallowCalibration"
2020-07-31 13:50:50 -07:00
@ click = "sendCalibrationMode"
>
2020-08-14 12:39:21 -07:00
{ { isCalibrating ? "Take Snapshot" : "Start Calibration" } }
2020-07-31 13:50:50 -07:00
< / v-btn >
< / v-col >
2020-08-14 12:39:21 -07:00
< v-col align -self = " center " >
2020-07-31 13:50:50 -07:00
< v-btn
small
2020-08-14 12:39:21 -07:00
: color = "hasEnough ? 'accent' : 'red'"
: class = "hasEnough ? 'black--text' : 'white---text'"
style = "width: 100%;"
2020-07-31 13:50:50 -07:00
: disabled = "checkCancellation"
@ click = "sendCalibrationFinish"
>
2020-08-14 12:39:21 -07:00
{ { hasEnough ? "End Calibration" : "Cancel Calibration" } }
2020-07-31 13:50:50 -07:00
< / v-btn >
< / v-col >
< v-col >
< v-btn
color = "accent"
small
outlined
2020-08-14 12:39:21 -07:00
style = "width: 100%;"
2020-07-31 13:50:50 -07:00
@ click = "downloadBoard"
>
< v-icon left >
mdi - download
< / v-icon >
2020-09-04 18:18:44 -07:00
Download Chessboard
2020-07-31 13:50:50 -07:00
< / v-btn >
< a
ref = "calibrationFile"
style = "color: black; text-decoration: none; display: none"
: href = "require('../assets/chessboard.png')"
2020-08-14 12:39:21 -07:00
download = "chessboard.png"
2020-07-31 13:50:50 -07:00
/ >
< / v-col >
< / v-row >
< / div >
< / v-card >
< / v-col >
< v-col
class = "pl-md-3 pt-3 pt-md-0"
cols = "12"
md = "5"
>
< CVimage
: address = "$store.getters.streamAddress[1]"
: disconnected = "!$store.state.backendConnected"
scale = "100"
style = "border-radius: 5px;"
2020-06-26 04:39:14 -07:00
/ >
2020-07-31 13:50:50 -07:00
< / v-col >
< / v-row >
2020-06-26 04:39:14 -07:00
< v-snackbar
v - model = "snack"
top
: color = "snackbar.color"
>
< span > { { snackbar . text } } < / span >
< / v-snackbar >
< / div >
2019-09-28 21:42:04 +03:00
< / template >
< script >
2020-08-14 12:39:21 -07:00
import CVselect from '../components/common/cv-select' ;
import CVnumberinput from '../components/common/cv-number-input' ;
import CVslider from '../components/common/cv-slider' ;
import CVimage from "../components/common/cv-image" ;
import TooltippedLabel from "../components/common/cv-tooltipped-label" ;
2019-10-29 23:58:06 +02:00
2020-08-14 12:39:21 -07:00
export default {
name : 'Cameras' ,
components : {
TooltippedLabel ,
CVselect ,
CVnumberinput ,
CVslider ,
CVimage
} ,
data ( ) {
return {
snackbar : {
color : "success" ,
text : ""
} ,
snack : false ,
2020-10-13 06:58:50 -07:00
filteredVideomodeIndex : undefined ,
2020-08-14 12:39:21 -07:00
}
} ,
computed : {
disallowCalibration ( ) {
return ! ( this . calibrationData . boardType === 0 || this . calibrationData . boardType === 1 ) ;
2019-09-28 21:42:04 +03:00
} ,
2020-08-14 12:39:21 -07:00
checkCancellation ( ) {
if ( this . isCalibrating ) {
return false
} else if ( this . disallowCalibration ) {
return true ;
} else {
return true
Add solvePNP, 3d tab on the UI, and some other misc bug fixes (#35)
* Rebase solvePNP on master
* added 3D tab minimap and csv reader
* More solvePNP
* Create draw pipe for pnp data
* SolvePNP piping work
* Move sorting into solvepnppipe
* Create calibration pipeline
* Update CalibrateSolvePNPPipeline.java
* add camera tilt angle
* Add calibration slider and snapshot button to 3D view
* Mirror updates in the socket handler
* add 3d calibration mode to the pipeline manager
* created calibration functions in ui and backend
* Start plumbing calibration
* Add snapshot and other handling to the RequestHandler
* added select resolution before starting calibration
* Rename solvePNPPipe to bounding box solve pnp pipe
* Update BoundingBoxSolvePNPPipe.java
* Add Mat serializer and CameraCalibrationConfig
* Begun calibration saving, fixed UI/Backend snapshot count mismatch
* Add (unplumbed) option to set checkerboard size
This will allow users to change the units their calibration is in
* Create chessboard.png
* Fix calibration NPE
* changed string serialization to a json send
* bug fixed cancellation button
* Fix spelling of snapshot in 3d.vue
* Plumb resolution change
* Set resolution during config, start on config serialization
* Update .gitignore
* Config fixes
* Start transition away from cvpipeline3d
* fix NPE on uncalibrated cameras
* clear list on fail
* Fix video mode index error
* ignore getters in camera calibration config
* Create json constructor for jsonmat
* get solvePNP mostly returning sane values
* Fix solvePNP bug and add unit test
* FIx calibration mat truncation
* added capture amount model upload and minimap data
* Standardize on meters in calibration and bounding box
* fix json out of bounds and handle null calibration more gracefully
* don't put text on calibrate image, go back to inches
* convert distance to meters
this means calibration will need to be in inches
* Actually save raw contor
* Update GroupContoursPipe.java
* Add all calibration return to camera capture
* hard code 2019 target
* bugfixed draw2d added fail calib popup, merge end and cancel
added the res index to the calib start
* Clarify error message and draw more fancy rectangles
* Cleanup memory in solvepnp
* re did minimap component
* fix npe if left/right is null
* remove references to 2d
* try-catch running the current pipeline
* Add method to find corners using the harris corner detector
* Possibly fix left/right missmatch
* Fix 3D Tab error
* FIx file permissions, mat serializer adjustments
* fixed mini map for field coordinates
* mini map changes fov
* Update SolvePNPPipe.java
* get rid of target corners
* some memory leak fixes
* fixed mini map location
* added position under minimap
* changed player fov look
* put all targets in the web send
* re did target send to ui added target tables, bugfix calibration
* fixed y position
* Add tilt angle to capture properties
* maybe fix y axis in minimap
* Add square size to onCalibrationEnding
* Possibly add square size to UI
* fix NPE with pitch
* Fix bug with sending multiple targets
* Only instantiate 3d stuff if we are in 3d mode
* Fix array list exceptions
* Fix bug in sort contors
list was truncated too early
* added download chess, tilt setting and ordinal tilt,
* added square size connection
* removed unused code
* Update pom version to 2.1-RELEASE
* Send camera calibrations to UI
* Stream pose list to a LIst
* Only stream necessary parts of the aux list entry
* Make broadcastMessage synchronized to prevent ConcurrentModificationExceptions
* added fps counter changed squaresize steps bug fixes in tables
* bugfix camera settings cam wont change
Authored-by: oriagranat9 <oriagranat9@gmail.com>
2019-12-31 04:53:20 -08:00
}
2019-10-12 18:09:05 +03:00
} ,
2020-08-14 12:39:21 -07:00
currentCameraIndex : {
get ( ) {
return this . $store . state . currentCameraIndex ;
2020-06-26 04:39:14 -07:00
} ,
2020-08-14 12:39:21 -07:00
set ( value ) {
this . $store . commit ( 'currentCameraIndex' , value ) ;
}
} ,
// Makes sure there's only one entry per resolution
filteredResolutionList : {
get ( ) {
let list = this . $store . getters . videoFormatList ;
let filtered = [ ] ;
list . forEach ( ( it , i ) => {
if ( ! filtered . some ( e => e . width === it . width && e . height === it . height ) ) {
it [ 'index' ] = i ;
const calib = this . getCalibrationCoeffs ( it ) ;
if ( calib != null ) {
it [ 'standardDeviation' ] = calib . standardDeviation ;
it [ 'mean' ] = calib . perViewErrors . reduce ( ( a , b ) => a + b ) / calib . perViewErrors . length ;
2020-06-26 04:39:14 -07:00
}
2020-08-14 12:39:21 -07:00
filtered . push ( it ) ;
2020-06-26 04:39:14 -07:00
}
2020-08-14 12:39:21 -07:00
} ) ;
filtered . sort ( ( a , b ) => ( b . width + b . height ) - ( a . width + a . height ) ) ;
return filtered
}
} ,
stringResolutionList : {
get ( ) {
return this . filteredResolutionList . map ( res => ` ${ res [ 'width' ] } X ${ res [ 'height' ] } ` ) ;
}
} ,
cameraSettings : {
get ( ) {
return this . $store . getters . currentCameraSettings ;
2020-06-26 04:39:14 -07:00
} ,
2020-08-14 12:39:21 -07:00
set ( value ) {
this . $store . commit ( 'cameraSettings' , value ) ;
}
} ,
boardType : {
get ( ) {
return this . calibrationData . boardType
2020-06-26 04:39:14 -07:00
} ,
2020-08-14 12:39:21 -07:00
set ( value ) {
this . $store . commit ( 'mutateCalibrationState' , { [ 'boardType' ] : value } ) ;
}
} ,
snapshotAmount : {
get ( ) {
return this . calibrationData . count
}
} ,
minSnapshots : {
get ( ) {
return this . calibrationData . minCount
}
} ,
hasEnough : {
get ( ) {
return this . calibrationData . hasEnough
}
} ,
boardWidth : {
get ( ) {
return this . calibrationData . patternWidth
2020-06-26 04:39:14 -07:00
} ,
2020-08-14 12:39:21 -07:00
set ( value ) {
this . $store . commit ( 'mutateCalibrationState' , { [ 'patternWidth' ] : value } )
}
} ,
boardHeight : {
get ( ) {
return this . calibrationData . patternHeight
2020-06-26 04:39:14 -07:00
} ,
2020-08-14 12:39:21 -07:00
set ( value ) {
this . $store . commit ( 'mutateCalibrationState' , { [ 'patternHeight' ] : value } )
2020-06-26 04:39:14 -07:00
}
} ,
2020-08-14 12:39:21 -07:00
squareSizeIn : {
get ( ) {
return this . calibrationData . squareSizeIn
2020-03-19 14:02:49 +02:00
} ,
2020-08-14 12:39:21 -07:00
set ( value ) {
this . $store . commit ( 'mutateCalibrationState' , { [ 'squareSizeIn' ] : value } )
}
} ,
calibrationData : {
get ( ) {
return this . $store . state . calibrationData
}
} ,
isCalibrating : {
get ( ) {
return this . $store . getters . currentPipelineIndex === - 2 ;
}
} ,
selectedFilteredResIndex : {
get ( ) {
return this . filteredVideomodeIndex
2020-01-25 23:11:02 +02:00
} ,
2020-08-14 12:39:21 -07:00
set ( i ) {
2020-09-04 18:18:44 -07:00
console . log ( ` Setting filtered index to ${ i } ` ) ;
this . filteredVideomodeIndex = i ;
2020-08-14 12:39:21 -07:00
this . $store . commit ( 'mutateCalibrationState' , { [ 'videoModeIndex' ] : this . filteredResolutionList [ i ] . index } ) ;
}
} ,
} ,
methods : {
getCalibrationCoeffs ( resolution ) {
const calList = this . $store . getters . calibrationList ;
let ret = null ;
calList . forEach ( cal => {
if ( cal . width === resolution . width && cal . height === resolution . height ) {
ret = cal
}
2020-09-04 18:18:44 -07:00
} ) ;
2020-08-14 12:39:21 -07:00
return ret ;
} ,
downloadBoard ( ) {
this . axios . get ( "http://" + this . $address + require ( '../assets/chessboard.png' ) , { responseType : 'blob' } ) . then ( ( response ) => {
2020-09-04 18:18:44 -07:00
require ( 'downloadjs' ) ( response . data , "Calibration Board" , "image/png" ) ;
} ) ;
2020-08-14 12:39:21 -07:00
} ,
sendCameraSettings ( ) {
this . axios . post ( "http://" + this . $address + "/api/settings/camera" , {
"settings" : this . cameraSettings ,
"index" : this . $store . state . currentCameraIndex
} ) . then (
function ( response ) {
if ( response . status === 200 ) {
this . $store . state . saveBar = true ;
2019-11-09 21:26:02 +02:00
}
Add solvePNP, 3d tab on the UI, and some other misc bug fixes (#35)
* Rebase solvePNP on master
* added 3D tab minimap and csv reader
* More solvePNP
* Create draw pipe for pnp data
* SolvePNP piping work
* Move sorting into solvepnppipe
* Create calibration pipeline
* Update CalibrateSolvePNPPipeline.java
* add camera tilt angle
* Add calibration slider and snapshot button to 3D view
* Mirror updates in the socket handler
* add 3d calibration mode to the pipeline manager
* created calibration functions in ui and backend
* Start plumbing calibration
* Add snapshot and other handling to the RequestHandler
* added select resolution before starting calibration
* Rename solvePNPPipe to bounding box solve pnp pipe
* Update BoundingBoxSolvePNPPipe.java
* Add Mat serializer and CameraCalibrationConfig
* Begun calibration saving, fixed UI/Backend snapshot count mismatch
* Add (unplumbed) option to set checkerboard size
This will allow users to change the units their calibration is in
* Create chessboard.png
* Fix calibration NPE
* changed string serialization to a json send
* bug fixed cancellation button
* Fix spelling of snapshot in 3d.vue
* Plumb resolution change
* Set resolution during config, start on config serialization
* Update .gitignore
* Config fixes
* Start transition away from cvpipeline3d
* fix NPE on uncalibrated cameras
* clear list on fail
* Fix video mode index error
* ignore getters in camera calibration config
* Create json constructor for jsonmat
* get solvePNP mostly returning sane values
* Fix solvePNP bug and add unit test
* FIx calibration mat truncation
* added capture amount model upload and minimap data
* Standardize on meters in calibration and bounding box
* fix json out of bounds and handle null calibration more gracefully
* don't put text on calibrate image, go back to inches
* convert distance to meters
this means calibration will need to be in inches
* Actually save raw contor
* Update GroupContoursPipe.java
* Add all calibration return to camera capture
* hard code 2019 target
* bugfixed draw2d added fail calib popup, merge end and cancel
added the res index to the calib start
* Clarify error message and draw more fancy rectangles
* Cleanup memory in solvepnp
* re did minimap component
* fix npe if left/right is null
* remove references to 2d
* try-catch running the current pipeline
* Add method to find corners using the harris corner detector
* Possibly fix left/right missmatch
* Fix 3D Tab error
* FIx file permissions, mat serializer adjustments
* fixed mini map for field coordinates
* mini map changes fov
* Update SolvePNPPipe.java
* get rid of target corners
* some memory leak fixes
* fixed mini map location
* added position under minimap
* changed player fov look
* put all targets in the web send
* re did target send to ui added target tables, bugfix calibration
* fixed y position
* Add tilt angle to capture properties
* maybe fix y axis in minimap
* Add square size to onCalibrationEnding
* Possibly add square size to UI
* fix NPE with pitch
* Fix bug with sending multiple targets
* Only instantiate 3d stuff if we are in 3d mode
* Fix array list exceptions
* Fix bug in sort contors
list was truncated too early
* added download chess, tilt setting and ordinal tilt,
* added square size connection
* removed unused code
* Update pom version to 2.1-RELEASE
* Send camera calibrations to UI
* Stream pose list to a LIst
* Only stream necessary parts of the aux list entry
* Make broadcastMessage synchronized to prevent ConcurrentModificationExceptions
* added fps counter changed squaresize steps bug fixes in tables
* bugfix camera settings cam wont change
Authored-by: oriagranat9 <oriagranat9@gmail.com>
2019-12-31 04:53:20 -08:00
}
2020-08-14 12:39:21 -07:00
)
} ,
isCalibrated ( resolution ) {
return this . $store . getters . currentCameraSettings . calibrations
2020-09-04 18:18:44 -07:00
. some ( e => e . width === resolution . width && e . height === resolution . height ) ;
2020-08-14 12:39:21 -07:00
} ,
sendCalibrationMode ( ) {
let data = {
[ 'cameraIndex' ] : this . $store . state . currentCameraIndex
} ;
if ( this . isCalibrating === true ) {
data [ 'takeCalibrationSnapshot' ] = true
} else {
2020-09-04 18:18:44 -07:00
const calData = this . calibrationData ;
calData . isCalibrating = true ;
data [ 'startPnpCalibration' ] = calData ;
2020-08-14 12:39:21 -07:00
2020-09-04 18:18:44 -07:00
console . log ( "starting calibration with index " + calData . videoModeIndex ) ;
2020-08-14 12:39:21 -07:00
}
this . $socket . send ( this . $msgPack . encode ( data ) ) ;
} ,
sendCalibrationFinish ( ) {
2020-09-04 18:18:44 -07:00
console . log ( "finishing calibration for index " + this . $store . getters . currentCameraIndex ) ;
2020-08-14 12:39:21 -07:00
this . snackbar . text = "Calibrating..." ;
2020-09-04 18:18:44 -07:00
this . snackbar . color = "secondary" ;
2020-08-14 12:39:21 -07:00
this . snack = true ;
this . axios . post ( "http://" + this . $address + "/api/settings/endCalibration" , this . $store . getters . currentCameraIndex )
. then ( ( response ) => {
if ( response . status === 200 ) {
this . snackbar = {
color : "success" ,
text : "Calibration successful! \n" +
"Standard deviation: " + response . data . toFixed ( 5 )
} ;
this . snack = true ;
Add solvePNP, 3d tab on the UI, and some other misc bug fixes (#35)
* Rebase solvePNP on master
* added 3D tab minimap and csv reader
* More solvePNP
* Create draw pipe for pnp data
* SolvePNP piping work
* Move sorting into solvepnppipe
* Create calibration pipeline
* Update CalibrateSolvePNPPipeline.java
* add camera tilt angle
* Add calibration slider and snapshot button to 3D view
* Mirror updates in the socket handler
* add 3d calibration mode to the pipeline manager
* created calibration functions in ui and backend
* Start plumbing calibration
* Add snapshot and other handling to the RequestHandler
* added select resolution before starting calibration
* Rename solvePNPPipe to bounding box solve pnp pipe
* Update BoundingBoxSolvePNPPipe.java
* Add Mat serializer and CameraCalibrationConfig
* Begun calibration saving, fixed UI/Backend snapshot count mismatch
* Add (unplumbed) option to set checkerboard size
This will allow users to change the units their calibration is in
* Create chessboard.png
* Fix calibration NPE
* changed string serialization to a json send
* bug fixed cancellation button
* Fix spelling of snapshot in 3d.vue
* Plumb resolution change
* Set resolution during config, start on config serialization
* Update .gitignore
* Config fixes
* Start transition away from cvpipeline3d
* fix NPE on uncalibrated cameras
* clear list on fail
* Fix video mode index error
* ignore getters in camera calibration config
* Create json constructor for jsonmat
* get solvePNP mostly returning sane values
* Fix solvePNP bug and add unit test
* FIx calibration mat truncation
* added capture amount model upload and minimap data
* Standardize on meters in calibration and bounding box
* fix json out of bounds and handle null calibration more gracefully
* don't put text on calibrate image, go back to inches
* convert distance to meters
this means calibration will need to be in inches
* Actually save raw contor
* Update GroupContoursPipe.java
* Add all calibration return to camera capture
* hard code 2019 target
* bugfixed draw2d added fail calib popup, merge end and cancel
added the res index to the calib start
* Clarify error message and draw more fancy rectangles
* Cleanup memory in solvepnp
* re did minimap component
* fix npe if left/right is null
* remove references to 2d
* try-catch running the current pipeline
* Add method to find corners using the harris corner detector
* Possibly fix left/right missmatch
* Fix 3D Tab error
* FIx file permissions, mat serializer adjustments
* fixed mini map for field coordinates
* mini map changes fov
* Update SolvePNPPipe.java
* get rid of target corners
* some memory leak fixes
* fixed mini map location
* added position under minimap
* changed player fov look
* put all targets in the web send
* re did target send to ui added target tables, bugfix calibration
* fixed y position
* Add tilt angle to capture properties
* maybe fix y axis in minimap
* Add square size to onCalibrationEnding
* Possibly add square size to UI
* fix NPE with pitch
* Fix bug with sending multiple targets
* Only instantiate 3d stuff if we are in 3d mode
* Fix array list exceptions
* Fix bug in sort contors
list was truncated too early
* added download chess, tilt setting and ordinal tilt,
* added square size connection
* removed unused code
* Update pom version to 2.1-RELEASE
* Send camera calibrations to UI
* Stream pose list to a LIst
* Only stream necessary parts of the aux list entry
* Make broadcastMessage synchronized to prevent ConcurrentModificationExceptions
* added fps counter changed squaresize steps bug fixes in tables
* bugfix camera settings cam wont change
Authored-by: oriagranat9 <oriagranat9@gmail.com>
2019-12-31 04:53:20 -08:00
}
2020-08-14 12:39:21 -07:00
else {
this . snackbar = {
color : "error" ,
text : "Calibration Failed!"
} ;
this . snack = true ;
Add solvePNP, 3d tab on the UI, and some other misc bug fixes (#35)
* Rebase solvePNP on master
* added 3D tab minimap and csv reader
* More solvePNP
* Create draw pipe for pnp data
* SolvePNP piping work
* Move sorting into solvepnppipe
* Create calibration pipeline
* Update CalibrateSolvePNPPipeline.java
* add camera tilt angle
* Add calibration slider and snapshot button to 3D view
* Mirror updates in the socket handler
* add 3d calibration mode to the pipeline manager
* created calibration functions in ui and backend
* Start plumbing calibration
* Add snapshot and other handling to the RequestHandler
* added select resolution before starting calibration
* Rename solvePNPPipe to bounding box solve pnp pipe
* Update BoundingBoxSolvePNPPipe.java
* Add Mat serializer and CameraCalibrationConfig
* Begun calibration saving, fixed UI/Backend snapshot count mismatch
* Add (unplumbed) option to set checkerboard size
This will allow users to change the units their calibration is in
* Create chessboard.png
* Fix calibration NPE
* changed string serialization to a json send
* bug fixed cancellation button
* Fix spelling of snapshot in 3d.vue
* Plumb resolution change
* Set resolution during config, start on config serialization
* Update .gitignore
* Config fixes
* Start transition away from cvpipeline3d
* fix NPE on uncalibrated cameras
* clear list on fail
* Fix video mode index error
* ignore getters in camera calibration config
* Create json constructor for jsonmat
* get solvePNP mostly returning sane values
* Fix solvePNP bug and add unit test
* FIx calibration mat truncation
* added capture amount model upload and minimap data
* Standardize on meters in calibration and bounding box
* fix json out of bounds and handle null calibration more gracefully
* don't put text on calibrate image, go back to inches
* convert distance to meters
this means calibration will need to be in inches
* Actually save raw contor
* Update GroupContoursPipe.java
* Add all calibration return to camera capture
* hard code 2019 target
* bugfixed draw2d added fail calib popup, merge end and cancel
added the res index to the calib start
* Clarify error message and draw more fancy rectangles
* Cleanup memory in solvepnp
* re did minimap component
* fix npe if left/right is null
* remove references to 2d
* try-catch running the current pipeline
* Add method to find corners using the harris corner detector
* Possibly fix left/right missmatch
* Fix 3D Tab error
* FIx file permissions, mat serializer adjustments
* fixed mini map for field coordinates
* mini map changes fov
* Update SolvePNPPipe.java
* get rid of target corners
* some memory leak fixes
* fixed mini map location
* added position under minimap
* changed player fov look
* put all targets in the web send
* re did target send to ui added target tables, bugfix calibration
* fixed y position
* Add tilt angle to capture properties
* maybe fix y axis in minimap
* Add square size to onCalibrationEnding
* Possibly add square size to UI
* fix NPE with pitch
* Fix bug with sending multiple targets
* Only instantiate 3d stuff if we are in 3d mode
* Fix array list exceptions
* Fix bug in sort contors
list was truncated too early
* added download chess, tilt setting and ordinal tilt,
* added square size connection
* removed unused code
* Update pom version to 2.1-RELEASE
* Send camera calibrations to UI
* Stream pose list to a LIst
* Only stream necessary parts of the aux list entry
* Make broadcastMessage synchronized to prevent ConcurrentModificationExceptions
* added fps counter changed squaresize steps bug fixes in tables
* bugfix camera settings cam wont change
Authored-by: oriagranat9 <oriagranat9@gmail.com>
2019-12-31 04:53:20 -08:00
}
2020-08-14 12:39:21 -07:00
}
) . catch ( ( ) => {
this . snackbar = {
color : "error" ,
text : "Calibration Failed!"
} ;
this . snack = true ;
} ) ;
2019-09-28 21:42:04 +03:00
}
}
2020-08-14 12:39:21 -07:00
}
2019-09-28 21:42:04 +03:00
< / script >
2020-08-14 12:39:21 -07:00
< style scoped >
. v - data - table {
text - align : center ;
background - color : transparent ! important ;
width : 100 % ;
height : 100 % ;
overflow - y : auto ;
}
. v - data - table th {
background - color : # 006492 ! important ;
}
. v - data - table th , td {
font - size : 1 rem ! important ;
}
2019-09-28 21:42:04 +03:00
< / style >